2010-06-02 55 views
0

我已经给我的WPF的ListView的上下文菜单:为WPF列表视图定义上下文菜单

<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

WPF命令在这种情况下非常有用。我认为你最好将每个MenuItem绑定到一个命令。通过这种方式,您可以在每个命令中定义何时可以执行此命令。 WPF自动检查每个命令是否可以在运行时执行。如果他们中的任何人不被允许执行,那么绑定到该命令的控制将自动失效。在这里您可以使用此示例代码为您CanExcute方法树视图的删除命令:做这个

private bool CanExcute() 
{ 
    if (MyTreeView.SelectedItem != null) 
     return true; 
    else 
     return false; 
} 

,已经选择了一个项目后,才,去除命令将被启用。否则其菜单项将被禁用。