我有一个相关的问题 - 我想为我的ContextMenu捕获点击事件的鼠标位置。问题: CommandParameter ElementName 无法识别我的菜单的父级(图像控件)。
作为参考,在将菜单添加到命名空间之前,我收到的绑定错误是:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=imgArena'. BindingExpression:(no path); DataItem=null; target element is 'MenuItem' (Name='mnuAddItem'); target property is 'CommandParameter' (type 'Object')
显然 WPF 上下文菜单与您的控件属于不同的可视化树,这使得绑定非常令人沮丧。
经过一番研究,我发现了这个简单的修复,我将它放在后面代码的构造函数中:
NameScope.SetNameScope(mnuGrid, NameScope.GetNameScope(this));
其中“mnuGrid”是我的上下文菜单的名称。
在我这样做之后,我能够将我的控制作为参数传递给我的命令,就像上面的 Beta Vulgaris 所做的那样。
作为参考,我的 XAML 如下所示:
<Image Name="imgArena" >
<Image.ContextMenu>
<ContextMenu Name="mnuGrid">
<MenuItem Header="Place _Entry" Name="mnuAddItem"
Command="{Binding AddEntryCmd}"
CommandParameter="{Binding ElementName=imgArena}" />
</ContextMenu>
<Image.ContextMenu>
</Image>