我在基于Canvas的WPF中创建了一个非常好的NodeGraph,我正在通过右键单击菜单添加漂亮的功能。
这些菜单是上下文相关的。意味着右键单击图形背景将显示图形ContextMenu,而右键单击图形中的节点将显示节点ContextMenu,或者如果节点具有带菜单的任何子控件,则为。
我一直在推迟这个特定问题,但不能再忽略它了。如标题中所述:当我右键单击某个节点时,将显示该图形的上下文菜单。如果我禁用图表的上下文菜单,那么节点就会显示正常。
这让我相信这是父控件在打开上下文菜单时优先考虑的问题。我已经尝试在父控件和子控件中重写鼠标事件并将它们设置为处理,但我无法理解它!
有人能协助我摆脱这个非常恼人的问题吗?
答案 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
直接分配给您的子控件。