私は次の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つのトリガーが他のトリガーをオーバーライドしていますか?
WPFは、宣言された順序でトリガーを処理しています。 2番目の例では、前景が非常に短時間緑に変更されています。ただし、IsMouseOverトリガーが実行され、色が黄色に戻ります。
IsMouseOverは、優先順位の点でIsPressedとは関係がありません。重要なのは、トリガーのXAMLでの宣言順序です。
つまり、トリガーは順番に処理されます。
後のトリガーは前のトリガーをオーバーライドします。