在WPF样式的setter属性上使用不同类型的触发器属性

时间:2014-10-22 13:54:01

标签: c# wpf

我希望在窗口本身的依赖属性为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属性定义类型。

1 个答案:

答案 0 :(得分:3)

要解决此问题,您可以将DataTriggerRelativeSource一起使用来查找祖先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,否则将自动重置为之前的值。