通过命令绑定打开上下文菜单

And*_*ndy 1 wpf binding command

我正试图绑定一个按钮,在左键单击打开其上下文菜单.我知道如何以编程方式执行此操作,但有没有办法使用默认命令绑定执行此操作?

我现在有:

    <Button Command="ApplicationCommands.ContextMenu">
        <Button.ContextMenu>
            <ContextMenu>
                <MenuItem ...
Run Code Online (Sandbox Code Playgroud)

但没有这样的运气...如果我这样做,那么按钮被禁用.我想这表明该命令无法执行,但为什么呢?

dko*_*ozl 6

你可以用几种方式做到这一点,其中有两个:

1)纯XAML

<Button Content="My Button">
    <Button.Triggers>
        <EventTrigger RoutedEvent="Button.Click">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
                            <DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
                        </BooleanAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </Button.Triggers>
    <Button.ContextMenu>
        <ContextMenu >
            <MenuItem Header="ABC"/>
        </ContextMenu>
    </Button.ContextMenu>
</Button>
Run Code Online (Sandbox Code Playgroud)

2)使用事件

<Button Content="My Button" Click="Button_Click">
    <Button.ContextMenu>
        <ContextMenu >
            <MenuItem Header="ABC"/>
        </ContextMenu>
    </Button.ContextMenu>
</Button>

private void Button_Click(object sender, RoutedEventArgs e)
{
   ContextMenu contextMenu = (sender as Button).ContextMenu;
   contextMenu.PlacementTarget = sender as UIElement;
   contextMenu.IsOpen = true;
}
Run Code Online (Sandbox Code Playgroud)