Такое действие изменяет внешний вид изображения, как показано на рис. 27.8.
Определение
стилей с триггерами
Стили WPF могут также содержать триггеры за счет упаковки объектов
Trigger
в коллекцию
Triggers
объекта
Style
. Использование триггеров в стиле позволяет определять некоторые элементы
Setter
таким образом, что они будут применяться только в случае истинности заданного условия триггера. Например, возможно требуется увеличивать размер шрифта, когда курсор мыши находится над кнопкой. Или, скажем, нужно подсветить текстовое поле, имеющее фокус, с использованием фона указанного цвета. Триггеры полезны в ситуациях подобного рода, потому что они позволяют предпринимать специфические действия при изменении свойства, не требуя написания явной логики С# в файле отделенного кода.
Далее приведена модифицированная разметка для стиля элементов управления типа
TextBox
, где обеспечивается установка фона желтого цвета, когда элемент
TextBox
получает фокус:
<!-- Стандартный стиль для всех текстовых полей -->
<Style TargetType="TextBox">
<Setter Property="FontSize" Value="14"/>
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="30"/>
<Setter Property="BorderThickness" Value="5"/>
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="FontStyle" Value="Italic"/>
<!-- Следующий установщик будет применен, только
когда текстовое поле находится в фокусе -->
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="Yellow"/>
</Trigger>
</Style.Triggers>
</Style>
При тестировании этого стиля вы обнаружите, что по мере перехода с помощью клавиши <ТаЬ> между элементами
TextBox
текущий выбранный
TextBox
получает фон желтого цвета (если только стиль не отключен путем присваивания
{x:Null}
свойству
Style
).
Триггеры свойств также весьма интеллектуальны в том смысле, что когда условие триггера не истинно, то свойство автоматически получает стандартное значение. Следовательно, как только
TextBox
теряет фокус, он также автоматически принимает стандартный цвет без какой-либо работы с вашей стороны. По контрасту с ними триггеры событий (которые исследовались при рассмотрении анимации WPF) не возвращаются автоматически в предыдущее состояние.
Определение стилей с множеством триггеров
Триггеры могут быть спроектированы так, что определенные элементы
Setter
будут применяться, когда истинными должны оказаться многие условия. Пусть необходимо устанавливать фон элемента
TextBox
в
Yellow
только в случае, если он имеет активный фокус и курсор мыши находится внутри его границ. Для этого можно воспользоваться элементом
MultiTriggern
определить в нем каждое условие:
<!-- Стандартный стиль для всех текстовых полей -->
<Style TargetType="TextBox">
<Setter Property="FontSize" Value="14"/>
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="30"/>
<Setter Property="BorderThickness" Value="5"/>
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="FontStyle" Value="Italic"/>
<!-- Следующий установщик будет применен, только когда текстовое
поле имеет фокус И над ним находится курсор мыши -->
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsFocused" Value="True"/>
<Condition Property="IsMouseOver" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Yellow"/>
</MultiTrigger>
</Style.Triggers>
</Style>
Стили с анимацией
Стили также могут содержать в себе триггеры, которые запускают анимационную последовательность. Ниже показан последний стиль, который после применения к элементам управления
Button
заставит их увеличиваться и уменьшаться в размерах, когда курсор мыши находится внутри границ кнопки: