在不同类型上使用触发器属性,而不是在WPF样式上使用setter属性
本文关键字:属性 样式 WPF setter 触发器 同类型 | 更新日期: 2023-09-27 18:27:24
当窗口本身的依赖属性为false时,我希望将主窗口上一组图像的不透明度设置为0.25,并在依赖属性为true时恢复它们。我曾尝试为此使用样式触发器,但当dependency属性与opacity属性的类型不同时遇到了困难。
<Window.Resources>
<Style x:Key="IconEnabledStyle" TargetType="Image">
<Style.Triggers>
<!-- MenuOptionsEnabled is on main window. Opacity is on Image -->
<Trigger Property="MenuOptionsEnabled" Value="False">
<Setter Property="Opacity" Value="0.25"></Setter>
</Trigger>
<Trigger Property="MenuOptionsEnabled" Value="True">
<Setter Property="Opacity" Value="1.0"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
正如您所看到的,Trigger属性与Setter属性的类型不同。是否有一种方法可以定义Trigger和Setter属性的类型。
要解决这个问题,可以使用DataTrigger
和RelativeSource
来查找祖先Window
,如下所示:
<Style x:Key="IconEnabledStyle" TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding MenuOptionsEnabled,
RelativeSource={RelativeSource AncestorType=Window}}"
Value="False">
<Setter Property="Opacity" Value="0.25"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
请注意,默认的Opacity
已经是1
。因此,您不需要任何触发器将其重置为1
。当满足条件时,设置为0.25
,否则将自动重置为之前的值。