WPF样式触发器在IsPressed上设置按钮前景,但不设置背景

时间:2017-03-27 16:02:29

标签: wpf xaml

我有以下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影响前景呢?

2 个答案:

答案 0 :(得分:1)

有可能在Button的模板(ControlTemplate)中,某些触发器将Background更改为不同的颜色。通过“强度”的程度,它比触发器的触发器具有更强的触发器,这就是它生效的原因。尝试在你发布的“ButtonStyle”样式中编辑Button的模板并将触发器放在那里。

答案 1 :(得分:1)

前景未受影响,因为当按下按钮时按钮的默认模板不会更新前景。它只更新背景 默认模板的触发器在样式触发后执行,这就是为什么您的背景不受您的风格影响。
更多解释在这里为http://harishasanblog.blogspot.com/2011/02/ismouseover-trigger-not-working-in-wpf.html