如何从定义为仅包含一个按钮的资源的上下文菜单中触发命令
本文关键字:上下文 资源 菜单 命令 按钮 定义 包含一 | 更新日期: 2023-09-27 18:31:57
>想象一下的情况,我的用户控件包含按钮:
<UserControl>
<Button Click="ShowContextMenu" />
</UserControl>
此按钮将在单击事件上显示上下文菜单:
ContextMenu contextMenu = this.FindResource("ContextMenuDefinition") as ContextMenu;
contextMenu.PlacementTarget = sender as Button;
contextMenu.Placement = System.Windows.Controls.Primitives.PlacementMode.Top;
contextMenu.IsOpen = true;
在资源字典中定义为资源(单独的文件):
<ContextMenu x:Key="ContextMenuDefinition" DataContext="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
<ContextMenu.Template>
<ControlTemplate>
<Button Style="{StaticResource MyStyle}" Command="{Binding AwesomeCommand}" />
</ControlTemplate>
</ContextMenu.Template>
</ContextMenu>
如何从此上下文菜单中触发任何 AwesomeCommand? - 我应该如何以及在哪里定义它,然后将其传递给上下文菜单进行调用?
非常感谢!
AwesomeCommand 必须驻留在 ViewModel 中。此视图应设置为用户控件的数据上下文。用户控件将具有按钮和上下文菜单。上下文菜单应按以下方式声明。
视图模型
public class ViewModel
{
public DelegateCommand AwesomeCommand { get; set; }
}
XAML
<Button>
<Button.ContextMenu>
<ContextMenu>
<MenuItem Command="{Binding AwesomeCommand}" />
</ContextMenu>
</Button.ContextMenu>
</Button>
我理解为什么您有一个单击处理程序来打开上下文菜单。若要在左键单击时打开上下文菜单,请遵循此方法。
左键单击的 WPF 上下文菜单