WPF窗口上的高对比度触发器

时间:2012-10-20 18:04:50

标签: c# wpf binding styles high-contrast

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

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

我尝试了this solution,但似乎都没有效果:

<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>

2 个答案:

答案 0 :(得分:1)

<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>

答案 1 :(得分:0)

想出来。不得不绑定到RelativeSource.Self ..为true和false添加两个触发器。忽略转换器..我需要一个用于我正在使用的图像。

<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><