我想在显示ContextMenu之前右键单击选择一个WPF TreeView节点.
对于WinForms,我可以使用这样的代码在上下文菜单下点击查找节点,WPF的替代方案是什么?
我有一个数据绑定TreeView,我想绑定SelectedItem.这种附加的行为工作完全没有HierarchicalDataTemplate,但与它连接的行为只能单向(UI数据)不是别的,因为现在e.NewValue是MyViewModel不是TreeViewItem.
这是附加行为的代码段:
private static void OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var item = e.NewValue as TreeViewItem;
if (item != null)
{
item.SetValue(TreeViewItem.IsSelectedProperty, true);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的TreeView定义:
<Window xmlns:interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
<TreeView ItemsSource="{Binding MyItems}" VirtualizingStackPanel.IsVirtualizing="True">
<interactivity:Interaction.Behaviors>
<behaviors:TreeViewSelectedItemBindingBehavior SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
</interactivity:Interaction.Behaviors>
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:MyViewModel}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Window>
Run Code Online (Sandbox Code Playgroud)
如果我可以获得TreeView对附加行为方法的引用OnSelectedItemChanged,也许我可以使用此问题中的答案来获取TreeViewItem但我不知道如何到达那里.有谁知道如何以及它是正确的方式去?
data-binding wpf treeview hierarchicaldatatemplate treeviewitem
我是第一次使用WPF树视图,并对它没有做的所有基本事情感到惊讶.其中之一是键盘导航,在任何自尊的树视图中实现,例如在Windows资源管理器或Regedit中.
这是它应该如何工作:
如果树视图具有焦点并且我键入(字母/数字),则选择应移动到当前所选项目下方的第一个可见(也称为展开)项目,该项目与我键入的字符串匹配并将其带入视图.如果在当前项目下方找不到匹配项,则搜索应从顶部继续.如果未找到匹配项,则不应更改所选项目.
只要我继续输入,搜索字符串就会增长并且搜索会被细化.如果我停止输入特定时间(2-5秒),则清空搜索字符串.
我准备从头开始"手工"编程,但由于这是非常基本的,我想当然有人已经做到了这一点.
我有一个表示某些项目的树视图.这棵树总是两层深.子项的右键单击菜单具有"向上移动"命令.UI允许您向上移动子项,即使它是其父项的第一项,只要在父级别上有另一项,在所选项的父项之上.
显而易见的方法是获取所选项目的父项,并查看其上方是否有项目.但是,在WPF中获取所选项目的父项是微不足道的.同样,显而易见的(对于WPF初学者,无论如何)方法是获取TreeViewItem具有Parent属性的所选项目.不幸的是,这也很难做到.
从那些说这很难的人那里得到暗示,因为我做错了,我决定问那些对WPF更有经验的人:什么是正确的,非硬的方法呢?逻辑上它是微不足道的,但我无法弄清楚处理WPF API的正确方法.