В WPF имеет значение порядок триггеров? - PullRequest
54 голосов
/ 18 февраля 2009

У меня есть следующий 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 ]

71 голосов
/ 18 февраля 2009

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

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

12 голосов
/ 26 июля 2016

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

Более поздние триггеры отменяют более ранние триггеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...