我希望在窗口本身的依赖属性为false时将主窗口上的一组图像的不透明度设置为0.25,并在依赖属性为true时将其恢复。我试图使用样式触发器,但当依赖属性与不透明度属性不同时,遇到了困难。
<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属性定义类型。
答案 0 :(得分:3)
要解决此问题,您可以将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
,否则将自动重置为之前的值。