web-dev-qa-db-ja.com

WPFでは、トリガーの順序は重要ですか?

私は次の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でトリガーの順序を逆にすると、マウスを上に置くと前景が黄色に変わりますが、ボタンを押しても前景が緑色に変わりません。

これの説明は何ですか? 1つのトリガーが他のトリガーをオーバーライドしていますか?

55
ScottG

WPFは、宣言された順序でトリガーを処理しています。 2番目の例では、前景が非常に短時間緑に変更されています。ただし、IsMouseOverトリガーが実行され、色が黄色に戻ります。

IsMouseOverは、優先順位の点でIsPressedとは関係がありません。重要なのは、トリガーのXAMLでの宣言順序です。

71
JaredPar

つまり、トリガーは順番に処理されます。

後のトリガーは前のトリガーをオーバーライドします。

13
Drew Noakes