父控件的WPF ContextMenu在具有自己的ContextMenu

时间:2016-01-14 01:12:19

标签: c# wpf xaml contextmenu

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

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

我一直在推迟这个特定问题,但不能再忽略它了。如标题中所述:当我右键单击某个节点时,将显示该图形的上下文菜单。如果我禁用图表的上下文菜单,那么节点就会显示正常。

这让我相信这是父控件在打开上下文菜单时优先考虑的问题。我已经尝试在父控件和子控件中重写鼠标事件并将它们设置为处理,但我无法理解它!

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

1 个答案:

答案 0 :(得分:1)

旧的,但万一有人落在这里,我能够通过使用以下技巧解决这个问题。 (在我的情况下,父控件是Grid,子控件是Path,两者都有自己的上下文菜单):

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

II。处理父级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直接分配给您的子控件。