Как отключить все элементы MenuItem в ContextMenu в XAML? - PullRequest
0 голосов
/ 28 июля 2011

Я пытался просто привязать к 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

Есть какие-нибудь предложения, как бы я просто отключил все опции контекстного меню с помощью XAML, если бы ContextMenu не казался забавным?

1 Ответ

1 голос
/ 28 июля 2011
<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>

Должно быть, повторное включение не так забавно, как есть, но вы можете привязать значение в установщике к чему-то, к чему вы можете легко получить доступ.

Далее вы можете отключить меню на более высоком уровне:

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

Тогда он вообще не откроется.

...