如何从定义为仅包含一个按钮的资源的上下文菜单中触发命令

本文关键字:上下文 资源 菜单 命令 按钮 定义 包含一 | 更新日期: 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 上下文菜单