- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我希望用户能够在 TreeView 中搜索项目。输入搜索文本后,TreeViewItem 应滚动到 View 中。
现在我正在为 TreeView、TreeViewItems 和 MainView 使用 MVVM 模式。
我需要做什么才能使用 MVVM 获得 BringIntoView 的功能?有一些我可以绑定(bind)的属性(property)吗? (在 MFC 中有类似 FirstVisibileItem 的东西)
已看到具有行为的“解决方案”。真的有必要吗?
最佳答案
根据提到的代码项目文章,这里是代码示例,展示了如何设置行为以及如何在 XAML 中集成行为。
设置行为:
/// <summary>
/// Exposes attached behaviors that can be
/// applied to TreeViewItem objects.
/// </summary>
public static class TreeViewItemBehavior
{
#region IsBroughtIntoViewWhenSelected
public static bool GetIsBroughtIntoViewWhenSelected(TreeViewItem treeViewItem)
{
return (bool)treeViewItem.GetValue(IsBroughtIntoViewWhenSelectedProperty);
}
public static void SetIsBroughtIntoViewWhenSelected( TreeViewItem treeViewItem, bool value)
{
treeViewItem.SetValue(IsBroughtIntoViewWhenSelectedProperty, value);
}
public static readonly DependencyProperty IsBroughtIntoViewWhenSelectedProperty =
DependencyProperty.RegisterAttached(
"IsBroughtIntoViewWhenSelected",
typeof(bool),
typeof(TreeViewItemBehavior),
new UIPropertyMetadata(false, OnIsBroughtIntoViewWhenSelectedChanged));
static void OnIsBroughtIntoViewWhenSelectedChanged(DependencyObject depObj, DependencyPropertyChangedEventArgs e)
{
TreeViewItem item = depObj as TreeViewItem;
if (item == null)
return;
if (e.NewValue is bool == false)
return;
if ((bool)e.NewValue)
item.Selected += OnTreeViewItemSelected;
else
item.Selected -= OnTreeViewItemSelected;
}
static void OnTreeViewItemSelected(object sender, RoutedEventArgs e)
{
// Only react to the Selected event raised by the TreeViewItem
// whose IsSelected property was modified. Ignore all ancestors
// who are merely reporting that a descendant's Selected fired.
if (!Object.ReferenceEquals(sender, e.OriginalSource))
return;
TreeViewItem item = e.OriginalSource as TreeViewItem;
if (item != null)
item.BringIntoView();
}
#endregion // IsBroughtIntoViewWhenSelected
}
然后在 XAML 中集成 TreeViewItemBehavior:
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="local:TreeViewItemBehavior.IsBroughtIntoViewWhenSelected" Value="True"/>
</Style>
</TreeView.ItemContainerStyle>
玩得开心:-)
关于c# - 使用 MVVM 的 TreeView BringIntoView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15586844/
我在事件处理程序后面有这段代码: private void comboActiveStudentAssignmentType_SelectionChanged(object sender, Selec
在 WPF 中,我有一个带有 7 个不同组框的滚动查看器。每个组框都是它自己的不同形式的单独部分。由于滚动查看器太长,我在面板左侧的堆栈面板中放置了一系列按钮,并完成了代码隐藏,以便单击按钮触发相应组
在我的 MVVM 应用程序中,我有一个树 View ,应该在选择时将树 View 项带入 View 。树 View 表示数据库中的记录。每个树 View 项通过在选择时展开项来按需加载其子项。 树 V
背景:我在 ScrollViewer 中定义了一个 usercontrol 以及一个 ContentControl,ContentControl 将始终可见,其中有一个Button,当点击按钮时会将u
我想加载大的 .rtf 文件并滚动到其中的特定段落。 所以我做了这样的事情: private FlowDocument GenerateDocument(string path) {
当您在 WPF 中的 TreeView 上设置 VirtualizingStackPanel.IsVirtualizing="True" 时: 调用 Tree
我希望用户能够在 TreeView 中搜索项目。输入搜索文本后,TreeViewItem 应滚动到 View 中。 现在我正在为 TreeView、TreeViewItems 和 MainView 使
我是一名优秀的程序员,十分优秀!