我试图绑定到ContextMenu.IsEnabled,但这样就使得ContextMenu即使在点击它之后仍然保持打开状态。在此简化代码和屏幕截图中说明:
<Window x:Class="ContextMenuSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Height="480"
Width="640">
<Grid>
<Rectangle Width="100"
Height="100"
Fill="Black">
<Rectangle.ContextMenu>
<ContextMenu IsEnabled="False">
<MenuItem Header="Command _1" />
<MenuItem Header="Command _2" />
<MenuItem Header="Command _3" />
<MenuItem Header="Command _4" />
</ContextMenu>
</Rectangle.ContextMenu>
</Rectangle>
</Grid>
</Window>
如果没有ContextMenu表现得很有趣,我会如何以简单的方式通过XAML禁用所有上下文菜单选项?
答案 0 :(得分:1)
<ContextMenu>
<ContextMenu.Resources>
<Style TargetType="MenuItem">
<Setter Property="IsEnabled" Value="False"/>
</Style>
</ContextMenu.Resources>
<MenuItem Header="Command _1" />
<MenuItem Header="Command _2" />
<MenuItem Header="Command _3" />
<MenuItem Header="Command _4" />
</ContextMenu>
应该这样做,重新启用虽然不那么有趣,但您可以将setter中的值绑定到您可以轻松访问的内容。
此外,您可以在更高级别禁用菜单:
<Rectangle Width="100"
Height="100"
Fill="Black"
ContextMenuService.IsEnabled="False">
<Rectangle.ContextMenu>
<ContextMenu>
<MenuItem Header="Command _1" />
<MenuItem Header="Command _2" />
<MenuItem Header="Command _3" />
<MenuItem Header="Command _4" />
</ContextMenu>
</Rectangle.ContextMenu>
</Rectangle>
然后它根本不会打开。