Подтвердить что ты не робот

"Выключить" изображение кнопки WPF?

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

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

4b9b3361

Ответ 1

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

<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 с RelativeSource FindAncestor для привязки к содержащей кнопке.

Ответ 2

Если вы хотите что-то более общее, поместите это в свой раздел ресурсов для своего окна или 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>

Ответ 3

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

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