当窗口本身的依赖属性为 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 属性的类型。
最佳答案
要解决这个问题,您可以使用 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>
请注意,默认的不透明度
已经是1
。因此您不需要任何触发器即可将其重置为1
。当满足条件时,设置为0.25
,否则会自动重置为之前的值。
关于c# - 在与 WPF 样式上的 setter 属性不同的类型上使用触发器属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26509134/