WPF上下文菜单绑定在右键单击时有效,但在左键单击时无效

本文关键字:单击 无效 有效 菜单 右键 WPF 上下文 绑定 | 更新日期: 2023-09-27 18:03:24

我有下面的xaml定义了一个上下文菜单在wpf:

<Grid Name="grid">
    <Button x:Name="settingsButton" DockPanel.Dock="Left" Content="Settings" Click="SettingsButtonClicked">
        <Button.ContextMenu>
            <ContextMenu>
                <MenuItem Header ="Column Chooser">
                    <MenuItem IsCheckable="true" Header="A" IsChecked="{Binding Path=IsAChoosen}"></MenuItem>
                    <MenuItem IsCheckable="true" Header="B" IsChecked="{Binding Path=IsBChoosen}"></MenuItem>
                    <MenuItem IsCheckable="true" Header="C" IsChecked="{Binding Path=IsCChoosen}"></MenuItem>
                </MenuItem>
            </ContextMenu>
        </Button.ContextMenu>
    </Button>
</Grid>

如果我正常地从右键菜单中调出上下文菜单,那么绑定就可以正常工作。

然而,我希望上下文菜单显示当我左键单击按钮而不是右键单击。所以我有下面的代码来做这件事:

public partial class SettingsView : UserControl
{
    public SettingsView()
    {
        InitializeComponent();
        settingsButton.MouseRightButtonDown += SettingsButtonOnMouseRightButtonDown;
    }
    private void SettingsButtonOnMouseRightButtonDown(object sender, MouseButtonEventArgs mouseButtonEventArgs)
    {
        settingsButton.ContextMenu.Visibility = Visibility.Hidden;
    }
    private void SettingsButtonClicked(object sender, RoutedEventArgs e)
    {
        settingsButton.ContextMenu.Visibility = Visibility.Visible;
        settingsButton.ContextMenu.PlacementTarget = sender as Image;
        settingsButton.ContextMenu.IsOpen = true;
    }
}

当我这样做时,绑定不起作用。有人知道为什么它工作与右键,而不是当我强制它左键点击?

WPF上下文菜单绑定在右键单击时有效,但在左键单击时无效

代替Image设置PlacementTarget To按钮

private void SettingsButtonClicked(object sender, RoutedEventArgs e)
{
    settingsButton.ContextMenu.Visibility = Visibility.Visible;
    settingsButton.ContextMenu.PlacementTarget = sender as Button;
    settingsButton.ContextMenu.IsOpen = true;
}