"Выключить" изображение кнопки WPF?
У меня есть простой элемент управления Button
, содержащий объект Image
в качестве его содержимого. Я хочу установить прозрачность Image
в 0.5, когда Button
отключен, чтобы предоставить дополнительный визуальный сигнал в отношении статуса Button
.
Каков самый простой способ добиться этого результата в XAML? Благодарим за помощь.
Ответы
Ответ 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>