Подтвердить что ты не робот

В 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, передний план меняет на желтый цвет, когда я нажимаю на него, но когда я нажимаю кнопку, передний план не меняется на зеленый.

Каково объяснение этого? Является ли один триггер приоритетным для другого?

4b9b3361

Ответ 1

WPF обрабатывает триггеры в заявленном порядке. Во втором примере передний план настолько кратковременно изменен на зеленый. Но затем запускается триггер IsMouseOver и возвращает цвет в желтый цвет.

IsMouseOver не имеет отношения к IsPressed с точки зрения приоритета. Важным является порядок объявления в XAML триггеров.

Ответ 2

Короче: триггеры обрабатываются в порядке.

Позже триггеры могут отменять предыдущие триггеры.