public class BindingProxy : Freezable
{
protected override Freezable CreateInstanceCore()
{
return new BindingProxy();
}
public static readonly DependencyProperty DataProperty =
DependencyProperty.Register(nameof(Data), typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null));
public object Data
{
get { return (object)GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}
}
2条答案
按热度按时间tzcvj98z1#
关于你问题的第一部分,ContextMenu默认的打开模式是左键单击它的容器,所以你不必实现任何特殊的东西来实现这一点。
字符串
关于用MVVM命令绑定MenuItems,解决方案相当棘手;由于ContextMenu本身不在VisualTree上,因此无法引用命令来与RelativeSource绑定。解决这个问题的方法是创建一个自定义BindingProxy,将DataContext与MenuItem链接起来
型
最终的结果将是......
型
wf82jlnq2#
使用XAML
以下XAML代码将创建一个按钮,当您使用鼠标左键或右键单击该按钮时,该按钮将打开上下文菜单:
字符串
ContextMenuOnLeftClick
样式会将按钮的ContextMenu
属性设定为ContextMenu
项目。ContextMenuPlacementMode
属性设定为MousePoint
,表示快显功能表会在鼠标器指标的位置开启。使用C#
下列C#程式码也会建立一个按钮,当您以鼠标器左键或右击按一下该按钮时,就会开启内容功能表:
型
此代码创建一个
ContextMenu
元素,并向其中添加两个MenuItem
对象。然后,ContextMenu
元素会指派给Button
对象的ContextMenu
属性。要在单击按钮时打开上下文菜单,可以处理按钮的
MouseDown
事件。在MouseDown
事件行程常式中,您可以将ContextMenu
元素的IsOpen
属性设定为true
。希望这对你有帮助!