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

Len*_*ijn 4 c# wpf xaml contextmenu

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

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

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

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

谁能帮助我摆脱这个非常烦人的问题?

dot*_*NET 5

旧的,但以防万一有人登陆这里,我能够通过使用以下技巧来解决这个问题。(在我的例子中,父控件是 a Grid,子控件是 a 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;
}
Run Code Online (Sandbox Code Playgroud)

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