WPF: Это стандартно, что когда пункт меню отключен, значок не отображается серым цветом? - PullRequest
13 голосов
/ 08 марта 2010

У меня есть пункты меню со значками, и когда он отключен, значок остается прежним. Могу ли я предоставить отключенную иконку и, если да, это также относится к элементам меню, связанным с командой?

Ответы [ 3 ]

10 голосов
/ 07 июня 2013

Нашел ответ Джоби полезным. Вот еще один способ сделать то же самое, используя стиль изображения и MenuItem.Icon:

<MenuItem Header="Add ..." Command="{Binding AddCommand}" >
   <MenuItem.Icon>
      <Image Source="{StaticResource AddImage}" Style="{StaticResource EnableDisableImageStyle}"/>
   </MenuItem.Icon>
</MenuItem>

И Стиль:

<Style x:Key="EnableDisableImageStyle" TargetType="{x:Type Image}">
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Opacity" Value="0.75"/>
            <Setter Property="BitmapEffect">
                <Setter.Value>
                    <BlurBitmapEffect Radius="2.0" KernelType="Gaussian"/>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>
8 голосов
/ 08 марта 2010

Да, это полностью зависит от вас. Потому что вы предоставили файл значков. Поэтому вам нужно создать Style.Trigger на MenuItem, чтобы отключить эффект. Либо сделайте Opacity = 0.5, либо переключите изображение на другое изображение .ico, пока IsEnabled = False в шаблоне

1 голос
/ 03 февраля 2017

Это кажется странным, но все, что я сделал, это создал следующий стиль. Вы могли бы подумать, что это встроенное поведение, но без этого (как OP) изображение не тускнеет. При этом изображение тоже влияет. И мне не нужно ничего менять в моем приложении.

<Style TargetType="MenuItem">
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Opacity" Value="0.5"/>
        </Trigger>
    </Style.Triggers>
</Style>
...