我使用以下代码,当我将对比度更改为高时,没有任何反应(按钮保持原始颜色), 我在这里想念什么?我只想在高对比度模式下将按钮颜色更改为白色
<Style x:Key="ButtonStyle"
TargetType="Button">
<Setter Property="Template"
Value="{StaticResource ButtonBaseControlTemplate}" />
<Setter Property="FocusVisualStyle">
<Setter.Value>
<Style>
</Style>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}"
Value="True">
<Setter Property="Background"
Value="White"/>
</DataTrigger>
</Style.Triggers>
</Style>
最佳答案
你需要在controltemplate里面添加datatrigger
<Button Height="35" Width="100" Content="Hello World">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Template" Value="{DynamicResource ButtonBaseControlTemplate1}"/>
</Style>
</Button.Style>
<Button.Resources>
<ControlTemplate x:Key="ButtonBaseControlTemplate1" TargetType="{x:Type ButtonBase}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="border" Value="#FFBEE6FD"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FF3C7FB1"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" TargetName="border" Value="#FFC4E5F6"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FF2C628B"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/>
</Trigger>
<DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="True">
<Setter Property="Background" Value="White"/>
<Setter Property="Foreground" Value="Black"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Resources>
</Button>
更新
我在 Tag 中存储了 HighContrast Theme 值。如果标记属性具有该值,则只有主题被更改为 HighContrast,否则不会。
<Window.Resources>
<!--Button ControlTemplate-->
<ControlTemplate x:Key="ButtonBaseControlTemplate" TargetType="{x:Type ButtonBase}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="border" Value="#FFBEE6FD"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FF3C7FB1"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" TargetName="border" Value="#FFC4E5F6"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FF2C628B"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/>
</Trigger>
<DataTrigger Binding="{Binding RelativeSource= {x:Static RelativeSource.Self}, Path=Tag}" Value="True">
<Setter Property="Background" Value="White"/>
<Setter Property="Foreground" Value="Black"/>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource= {x:Static RelativeSource.Self}, Path=Tag}" Value="False">
<Setter Property="Background" Value="Gray"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<!--Button Style-->
<Style x:Key="buttonstyle" TargetType="Button">
<Setter Property="Template" Value="{StaticResource ButtonBaseControlTemplate}"/>
</Style>
</Window.Resources>
<Grid>
<Button HorizontalAlignment="Left" Height="35" Style="{StaticResource buttonstyle}" Width="100" Tag="{DynamicResource {x:Static SystemParameters.HighContrastKey}}" Content="Hello World"/>
<Button HorizontalAlignment="Right" Height="35" Width="100" Style="{StaticResource buttonstyle}" Content="ok"></Button>
</Grid>
关于c# - 将 Windows 主题更改为高对比度时,将按钮颜色更改为白色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22377928/