«Выцветает» изображение кнопки WPF? - PullRequest
53 голосов
/ 27 марта 2010

У меня есть простой Button элемент управления, который содержит Image объект в качестве его содержимого. Я хочу установить непрозрачность Image на 0,5, когда Button отключен, чтобы обеспечить дополнительную визуальную подсказку о состоянии Button.

Какой самый простой способ достичь этого результата в XAML? Спасибо за вашу помощь.

Ответы [ 4 ]

150 голосов
/ 28 марта 2010

Используйте триггер в стиле изображения. (Было бы более естественно поместить его в стиль кнопки, но стиль кнопки не может легко повлиять на изображение по назойливым техническим причинам. Это можно сделать в шаблоне элемента управления Button, но это излишне для того, что вы хочу здесь.)

<Button>
  <Image Source="something.png">
    <Image.Style>
      <Style TargetType="Image">
        <Style.Triggers>
          <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Opacity" Value="0.5" />
          </Trigger>
        </Style.Triggers>
      </Style>
    </Image.Style>
  </Image>
</Button>

Обратите внимание, что здесь мы пользуемся тем фактом, что изображение будет отключено, когда кнопка будет отключена, поэтому мы можем запускать непосредственно в собственном свойстве изображения IsEnabled. В других случаях свойство Button, которое мы хотим активировать, может не наследоваться Image; в этом случае для привязки к содержащейся кнопке нам понадобится DataTrigger с FindAncestor RelativeSource.

34 голосов
/ 04 января 2013

Если вы хотите что-то более общее, поместите это в разделе ресурсов для вашего окна или UserControl.

<UserControl.Resources>     
    <Style x:Key="ImageEnabled" TargetType="Image">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value="0.25"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

А на фактической кнопке просто сделай это

<Button>
    <Image Source="{StaticResource LinkImage}" Style="{StaticResource ImageEnabled}"/>
</Button>
19 голосов
/ 10 июня 2012

Вот более общий стиль, который вы можете применить:

<Style TargetType="Button">
    <Style.Resources>
        <Style TargetType="Image">
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Opacity" Value="0.5" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Style.Resources>
</Style>
1 голос
/ 21 ноября 2018

Если вы хотите, чтобы вся кнопка была закрашена серым, стилизация самой кнопки сработала для меня. Кажется, что все содержимое кнопки серое.

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