首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为WPF TreeViews定义上下文菜单

为WPF TreeViews定义上下文菜单
EN

Stack Overflow用户
提问于 2010-06-02 12:58:04
回答 1查看 814关注 0票数 0

我给了我的WPF TreeView一个上下文菜单:

代码语言:javascript
运行
复制
<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的,所以:

  • 如何使用户右击树视图项时,该项被选中。
  • ,以及是否有更好的方法来实现上述目标?
EN

回答 1

Stack Overflow用户

发布于 2010-06-02 13:38:41

在这种情况下,WPF命令非常有用。我认为最好将每个MenuItem绑定到一个命令上。这样,在每个命令中,您都可以定义何时可以执行此命令。WPF自动检查每个命令是否可以在运行时执行。如果不允许它们中的任何一个执行,则绑定到该命令的控件将自动禁用。在这里,您可以使用此示例代码作为treeview的remove命令的CanExcute方法:

代码语言:javascript
运行
复制
private bool CanExcute()
{
    if (MyTreeView.SelectedItem != null)
       return true;
    else
       return false;
}

通过这样做,只有在选择了一个项之后,才会启用remove命令。否则,其菜单项将被禁用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2957837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档