禁用右键单击并使用MVVM在WPF中启用左键单击上下文菜单

sum*_*man 6 wpf contextmenu

码:

<Button Style="{StaticResource HPForegroundStyle}" IsTabStop="False"                 
        Command="{Binding ForegroundPhoneCommand}"  Click="Button_Click">
                    <Button.ContextMenu>                   
                        <ContextMenu ItemsSource="{Binding OptionsMenuItemList}"                            ItemContainerStyle="{StaticResource ContextMenuItemStyle}" 
                                     IsOpen="{Binding IsMenuOpen}"                                        
                                     PlacementTarget="{Binding RelativeSourc={RelativeSource AncestorType={x:Type Button}}}">
                        </ContextMenu>
                    </Button.ContextMenu>
    </Button>
Run Code Online (Sandbox Code Playgroud)

我正在使用MVVM模式.在ViewModel中,我有一个属性'IsMenuOpen',它控制上下文菜单打开关闭.问题是我能够禁用右键单击而不能在左键单击时显示上下文菜单.

sev*_*ian 21

您还可以检查ContextMenuService.IsEnabled父控件上的附加属性.它将仅阻止右键单击,您仍然可以在左键单击时手动显示菜单,因此基于前面的示例:

<Button x:Name="btn" Click="btn_Click" ContextMenuService.IsEnabled="false">
    <Button.ContextMenu>
        <ContextMenu x:Name="popup">
         ...
        </ContextMenu>
    </Button.ContextMenu>
</Button>

private void btn_Click(object sender, RoutedEventArgs e)
{
    popup.Visibility = Visibility.Visible;
    popup.IsOpen = true;
}
Run Code Online (Sandbox Code Playgroud)


Ter*_*lis 0

如果要将菜单绑定到属性,请考虑 Popup 控件。它具有与上下文菜单类似的功能,但不绑定到特定的鼠标按钮......

<Popup IsVisible = {Binding IsMenuOpen} >
    <!-- Fill in what you need here -->
</Popup>
Run Code Online (Sandbox Code Playgroud)