WPF中,右键菜单一旦设置,就很难控制其不让打开,点击右键一定会弹出,如果只是隐藏几个项还是没问题的,但是如果所有项都隐藏了,还是会弹出一个空白内容的右键菜单,难看死,也没有给任何后台控制的方法,于是找到了一个前台的属性可以控制。
<Window x:Class="WPFTest.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300"> <Grid> <Grid.ContextMenu> <ContextMenu ContextMenuService.IsEnabled="{Binding IsContextMenuVisible}"> <MenuItem Header="测试"/> </ContextMenu> </Grid.ContextMenu> </Grid> </Window>
namespace WPFTest { public partial class Window1 : Window { public static readonly DependencyProperty IsContextMenuVisibleProperty = DependencyProperty.Register("IsContextMenuVisible", typeof(Boolean), typeof(Window1), new PropertyMetadata()); public Window1() { InitializeComponent(); DataContext = this; } } }
由于默认值为false,因此右键菜单默认不显示,当需要显示的时候,插入代码
SetValue(IsContextMenuVisibleProperty, true);
即可,原理就是通过改变这个依赖项属性来控制右键菜单是否可以使用,可惜这个是静态的附加属性,后台访问不到,有知道后台访问它的人可以告知下,目前只有绑定法可行。