我有以下XAML代码,它使用单个按钮创建一个窗口。单击按钮时,前景色会变为红色,但背景颜色不会更改。为什么一个改变了,而另一个改变了呢?
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfExperiments"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid Margin="0,0,0,2">
<Grid.Resources>
<Style x:Key="ButtonStyle" TargetType="Button">
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Button Style="{StaticResource ButtonStyle}"
Content="Button"
HorizontalAlignment="Left"
Margin="135,97,0,0"
VerticalAlignment="Top"
Width="75"
/>
</Grid>
</Window>
我当然是用Google搜索过的。我发现的大部分内容都表示修复是使用模板而不是样式,如果这是解决方案,我当然愿意这样做。但我在one SO answer中注意到按钮具有覆盖样式值的默认模板。如果是这样,为什么我的XAML影响前景呢?
答案 0 :(得分:1)
有可能在Button的模板(ControlTemplate)中,某些触发器将Background更改为不同的颜色。通过“强度”的程度,它比触发器的触发器具有更强的触发器,这就是它生效的原因。尝试在你发布的“ButtonStyle”样式中编辑Button的模板并将触发器放在那里。
答案 1 :(得分:1)
前景未受影响,因为当按下按钮时按钮的默认模板不会更新前景。它只更新背景
默认模板的触发器在样式触发后执行,这就是为什么您的背景不受您的风格影响。
更多解释在这里为http://harishasanblog.blogspot.com/2011/02/ismouseover-trigger-not-working-in-wpf.html