Style="{StaticResource TiltButton}" Width="250" Cursor="Help"/>
Такое действие изменяет внешний вид изображения, как показано на рис. 27.8.
Определение стилей с триггерами
Стили WPF могут также содержать триггеры за счет упаковки объектов Trigger
в коллекцию Triggers
объекта Style
. Использование триггеров в стиле позволяет определять некоторые элементы Setter
таким образом, что они будут применяться только в случае истинности заданного условия триггера. Например, возможно требуется увеличивать размер шрифта, когда курсор мыши находится над кнопкой. Или, скажем, нужно подсветить текстовое поле, имеющее фокус, с использованием фона указанного цвета. Триггеры полезны в ситуациях подобного рода, потому что они позволяют предпринимать специфические действия при изменении свойства, не требуя написания явной логики С# в файле отделенного кода.
Далее приведена модифицированная разметка для стиля элементов управления типа TextBox
, где обеспечивается установка фона желтого цвета, когда элемент TextBox
получает фокус:
При тестировании этого стиля вы обнаружите, что по мере перехода с помощью клавиши <ТаЬ> между элементами TextBox
текущий выбранный TextBox
получает фон желтого цвета (если только стиль не отключен путем присваивания {x:Null}
свойству Style
).
Триггеры свойств также весьма интеллектуальны в том смысле, что когда условие триггера TextBox
теряет фокус, он также автоматически принимает стандартный цвет без какой-либо работы с вашей стороны. По контрасту с ними триггеры событий (которые исследовались при рассмотрении анимации WPF) не возвращаются автоматически в предыдущее состояние.
Определение стилей с множеством триггеров
Триггеры могут быть спроектированы так, что определенные элементы Setter
будут применяться, когда истинными должны оказаться TextBox
в Yellow
только в случае, если он имеет активный фокус и курсор мыши находится внутри его границ. Для этого можно воспользоваться элементом MultiTriggern
определить в нем каждое условие:
Стили с анимацией
Стили также могут содержать в себе триггеры, которые запускают анимационную последовательность. Ниже показан последний стиль, который после применения к элементам управления Button
заставит их увеличиваться и уменьшаться в размерах, когда курсор мыши находится внутри границ кнопки:
Duration="0:0:2" AutoReverse="True"/>
Здесь коллекция Triggers
наблюдает за тем, когда свойство IsMouseOver
возвратит значение true
. После того как это произойдет, определяется элемент Trigger.EnterActions
для выполнения простой раскадровки, которая заставляет кнопку за две секунды увеличиться до значения Height
, равного 200
(и затем возвратиться к значению Height
, равному 40
). Чтобы отслеживать другие изменения свойств, можно также добавить область Trigger.ExitActions
и определить в ней любые специальные действия, которые должны быть выполнены, когда IsMouseOver
изменяется на false
.
Применение стилей в коде
Вспомните, что стиль может применяться также во время выполнения. Прием удобен, когда у конечных пользователей должна быть возможность выбора внешнего вида для их пользовательского интерфейса, требуется принудительно устанавливать внешний вид и поведение на основе настроек безопасности (например, стиль DisableAllButton
) или еще в какой-то ситуации.
В текущем проекте было определено порядочное количество стилей, многие из которых могут применяться к элементам управления Button
. Давайте переделаем пользовательский интерфейс главного окна, чтобы позволить пользователю выбирать имена имеющихся стилей в элементе управления ListBox
. На основе выбранного имени будет применен соответствующий стиль. Вот финальная разметка для элемента DockPanel
:
SelectionChanged="comboStyles_Changed" />
Элемент управления ListBox
(по имени IstStyles
) будет динамически заполняться внутри конструктора окна:
public MainWindow
{
InitializeComponent;
// Заполнить окно со списком всеми стилями для элементов Button.
lstStyles.Items.Add("GrowingButtonStyle");
lstStyles.Items.Add("TiltButton");
lstStyles.Items.Add("BigGreenButton");
lstStyles.Items.Add("BasicControlStyle");}
}
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT