WPF父控件的ContextMenu在子控件上打开并显示自己的ContextMenu

4

我在基于Canvas的WPF中制作了一个很好看的NodeGraph,并且正在通过右键菜单添加一些不错的功能。

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

我已经拖延了这个问题一段时间,但现在不能再忽略它了。正如标题所述:当我在节点上右键单击时,图形的上下文菜单会显示出来。如果我禁用图形的上下文菜单,节点的上下文菜单就能正常显示出来。

这使我相信这是父控件在打开上下文菜单时占据了优先权的问题。我已经尝试在父控件和子控件中重写鼠标事件并将其设置为handled,但我还是想不明白!

有人能帮助我摆脱这个非常恼人的问题吗?


你解决过这个问题吗?我也遇到了类似的问题。当右键单击子控件时,我的画布上下文菜单会出现,而我不想要这个。我只希望在画布的“空白”区域单击时才出现它。这证明比最初看起来更难以解决! - Andrew Stephens
1个回答

5

如果有人看到这篇文章,请注意,我通过使用以下技巧解决了这个问题(在我这里,父控件是一个Grid,子控件是一个Path,两者都有自己的上下文菜单):

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

2. 处理父控件的MouseRightButtonDown事件,并将以下代码放入其处理程序中:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接