为WPF TreeView定义上下文菜单
我已经给了我的WPF树视图一个上下文菜单:为WPF TreeView定义上下文菜单,wpf,treeview,contextmenu,Wpf,Treeview,Contextmenu,我已经给了我的WPF树视图一个上下文菜单: <TreeView ContextMenuOpening="TreeView_ContextMenuOpening"> <TreeView.ContextMenu> <ContextMenu> <MenuItem Name="NewInputMenuItem" Header="Add" Click="AddInputMenuItem_Click" />
<TreeView ContextMenuOpening="TreeView_ContextMenuOpening">
<TreeView.ContextMenu>
<ContextMenu>
<MenuItem Name="NewInputMenuItem" Header="Add" Click="AddInputMenuItem_Click" />
<MenuItem Name="RemoveInputMenuItem" Header="Remove" Click="RemoveInputMenuItem_Click" />
</ContextMenu>
</TreeView.ContextMenu>
<!-- etc... -->
</TreeView>
我在TreeView
上定义了上下文菜单,而不是在TreeViewItem
上定义了上下文菜单,因为无论是否选择某个项目,我都希望显示相同的上下文菜单,但是我确实希望仅当用户右键单击某个项目时才启用“删除”菜单项,而不仅仅是在菜单中的空白处
我目前处理这个问题的方法是使用TreeView
(在TreeView\u ContextMenuOpening
事件处理程序中)的selected item属性,但问题是右键单击树视图项会打开该树视图的上下文菜单,而不会更改树视图项的选定状态
此外,我忍不住认为上述所有内容都与WPF非常相似,因此:
- 如何使其在用户右键单击树状视图项目时处于选中状态
- 有没有更好的方法实现上述目标
- WPF命令在这种情况下非常有用。我想你最好把每个菜单项都绑定到一个命令上。这样,您可以在每个命令中定义何时可以执行此命令。WPF自动检查每个命令是否可以在运行时执行。如果不允许执行其中任何命令,则该命令的绑定控件将自动禁用。在这里,您可以使用此示例代码作为treeview的remove命令的CanExcute方法:
private bool CanExcute()
{
if (MyTreeView.SelectedItem != null)
return true;
else
return false;
}
通过执行此操作,只有在选择项目后,才会启用“删除”命令。否则,其菜单项将被禁用