0

我正在尝试将触发器应用于我制作的基本 WPF 窗口。我可以成功地对其应用样式,但触发器似乎不起作用。

本质上,我所做的是在运行时将当前资源字典转储到应用程序中并加载到另一组资源字典中以解决高对比度问题。它似乎正在工作,但我正在尝试制定一个需要在高对比度模式下处理的图像的解决方案。在这种特殊情况下,窗口的背景设置为 ImageBrush。在高对比度模式下,我正在尝试使用触发器将背景设置为系统颜色。

我尝试了这个解决方案,但似乎都不起作用:

<Style TargetType="{x:Type local:Mywindow}">
  <Setter Property="Tag"
          Value="{DynamicResource {x:Static SystemParameters.HighContrastKey}}" />
  <Style.Triggers>
    <Trigger
        Property="Tag"
        Value="True">
      <Setter Property="Background" Value="{DynamicResource MyColor}"/>
    </Trigger>
  </Style.Triggers>
</Style>

并且

<Style TargetType="{x:Type local:Mywindow}">
    <Style.Triggers>
        <DataTrigger
            Binding="{Binding Source={x:Static SystemParameters.HighContrast}}"
            Value="True">
            <Setter Property="Style" Value="{DynamicResource highContrastStyle}"/>
        </DataTrigger>
    </Style.Triggers>
</Style>
4

1 回答 1

0

弄清楚了。必须绑定到RelativeSource.Self.. 添加两个触发器为真和假。忽略转换器。我需要一个用于我正在使用的图像。

<Style x:Key="MyWindowKey" TargetType="{x:Type test:MyWindow}">
        <Setter Property="Tag" Value="{DynamicResource {x:Static SystemParameters.HighContrastKey}}" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding RelativeSource= {x:Static RelativeSource.Self}, Path=Tag}" Value="True">
                <Setter Property="Background" Value="{DynamicResource MyWindowBrush}"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding RelativeSource= {x:Static RelativeSource.Self},  Path=Tag}" Value="False">
                <Setter Property="Background">
                    <Setter.Value>
                        <ImageBrush ImageSource="{Binding Source={x:Static test:Images.MyImage},Converter={StaticResource ResourceKey=ImageConverter}}" Stretch="UniformToFill">
                        </ImageBrush>
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style><
于 2012-10-20T23:36:25.573 回答