在WPF中,触发器的顺序是否重要?

时间:2009-02-18 14:09:55

标签: wpf triggers

我有以下xaml:

<DockPanel>
    <DockPanel.Resources>
        <Style TargetType="Button">
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Foreground" Value="Yellow"></Setter>
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Foreground" Value="Green"></Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </DockPanel.Resources>
    <Button Content="Cut" Height="30" Width="75"/>
</DockPanel>

当我将鼠标悬停在按钮上时,前景变为黄色,然后当我按下按钮时,前景变为绿色。

现在,如果我在XAML中反转触发器的顺序,当我将鼠标悬停在它上面时,前景会变为黄色,但是当我按下按钮时,前景不会变为绿色。

对此有何解释?一个触发器是否会覆盖另一个触发器?

2 个答案:

答案 0 :(得分:70)

WPF正在按声明的顺序处理您的触发器。在第二个例子中,前景如此短暂地变为绿色。但随后IsMouseOver触发器运行并将颜色设置回黄色。

IsMouseOver在优先级方面与IsPressed没有任何关系。重要的是XAML中触发器的声明顺序。

答案 1 :(得分:12)

简而言之:触发器按顺序处理。

后来的触发器覆盖了早期的触发器。