如何在XAML中禁用上下文菜单中的所有菜单项?

时间:2011-07-28 12:39:39

标签: wpf xaml data-binding contextmenu

我试图绑定到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 stuck open

如果没有ContextMenu表现得很有趣,我会如何以简单的方式通过XAML禁用所有上下文菜单选项?

1 个答案:

答案 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>

然后它根本不会打开。