c# - 父控件的 WPF ContextMenu 在具有自己的 ContextMenu 的子控件上打开

标签 c# wpf xaml contextmenu

我在基于 Canvas 的 WPF 中制作了一个非常漂亮的 NodeGraph,现在我正在通过右键单击菜单添加漂亮的功能。

这些菜单是上下文相关的。这意味着右键单击图表的背景将显示图表上下文菜单,而右键单击图表中的节点将显示节点上下文菜单,或者如果节点有任何带菜单的子控件,则显示这些菜单。

我已经将这个特定问题推迟了一段时间,但不能再忽略它了。如标题所述:当我右键单击一个节点时,将显示图形的上下文菜单。如果我禁用图形的上下文菜单,节点会显示得很好。

这让我相信这是父控件在打开上下文菜单时优先的问题。我已经尝试覆盖父控件和子控件中的鼠标事件并将它们设置为已处理,但我就是想不通!

谁能帮我解决这个非常烦人的问题?

最佳答案

旧但以防万一有人登陆这里,我能够使用以下技巧解决这个问题。 (在我的例子中,父控件是一个 Grid,子控件是一个 Path,它们都有自己的上下文菜单):

我。不要将 ContextMenu 分配给父控件。而是将其作为资源添加到其 Resources 部分。

二。处理父级的 MouseRightButtonDown 事件并将以下代码放入其处理程序中:

if (!(e.OriginalSource is Path)) //Or whatever is the type of child control
{
  var cmnu = this.FindResource("ParentContextMenu") as ContextMenu;
  cmnu.IsOpen = true;
}

三。将 ContextMenu 直接分配给您的子控件。

关于c# - 父控件的 WPF ContextMenu 在具有自己的 ContextMenu 的子控件上打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34780046/

相关文章:

wpf - VisualStateManager VisualGroup 优先级

c# - 日语电子邮件主题编码

c# - 无法使用 ASP.NET Redis SessionState Provider 连接到本地 Redis Sentinel 故障转移系统

c# - Datagrid selectedItem 和数据绑定(bind)

wpf - 如何在调整窗口大小时调整 ListView 控件的大小

xaml - 实现类似 OnPlatform/OnIdiom 的系统

wpf - DataGrid 列调整大小,调整 Grid ColumnDefinitions 的大小

c# - Windows 应用商店应用程序数据将 TextBlock 绑定(bind)到来自 Web 服务的对象

c# - 类设计 : Serialize Within Domain Object or Helper Class

wpf - Entity Framework 4.0 数据绑定(bind)与排序不起作用