我给了我的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
的selected属性(在TreeView_ContextMenuOpening
事件处理程序中),但是问题是,右键单击树视图项会打开该树视图的上下文菜单,而不会更改树视图项的选定状态。
另外,我不禁认为,上述所有这些都是非常不符合WPF的,所以:
发布于 2010-06-02 13:38:41
在这种情况下,WPF命令非常有用。我认为最好将每个MenuItem绑定到一个命令上。这样,在每个命令中,您都可以定义何时可以执行此命令。WPF自动检查每个命令是否可以在运行时执行。如果不允许它们中的任何一个执行,则绑定到该命令的控件将自动禁用。在这里,您可以使用此示例代码作为treeview的remove命令的CanExcute方法:
private bool CanExcute()
{
if (MyTreeView.SelectedItem != null)
return true;
else
return false;
}
通过这样做,只有在选择了一个项之后,才会启用remove命令。否则,其菜单项将被禁用。
https://stackoverflow.com/questions/2957837
复制相似问题