我已经为我的WPF TreeView提供了一个上下文菜单:
<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_ContextMenuOpening
事件处理程序中),但问题是右键单击树视图项打开该树视图的上下文菜单,不用更改树视图项的选定状态。
另外,我不禁想到以上所有内容都非常类似于WPF,所以:
答案 0 :(得分:0)
WPF命令在这种情况下非常有用。我认为你最好将每个MenuItem绑定到一个命令。这样,在每个命令中,您可以定义何时可以执行此命令。 WPF自动检查是否可以在运行时执行每个命令。如果其中任何一个不允许被执行,则对该命令的绑定控件将自动被禁用。在这里,您可以使用此示例代码作为Treeview的remove命令的CanExcute方法:
private bool CanExcute()
{
if (MyTreeView.SelectedItem != null)
return true;
else
return false;
}
通过这样做,只有在选择了一个项目之后,才会启用remove命令。否则其菜单项将被禁用。