Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

</Setter>

</Style>

Чтобы применить новый стиль, модифицируйте разметку для кнопки следующим образом:

<Button x:Name="btnAnotherButton" Content="OK!" Margin="0,10,0,0"

Style="{StaticResource TiltButton}" Width="250" Cursor="Help"/>

Такое действие изменяет внешний вид изображения, как показано на рис. 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
заставит их увеличиваться и уменьшаться в размерах, когда курсор мыши находится внутри границ кнопки:

<!-- Стиль увеличивающейся кнопки -->

<Style x:Key="GrowingButtonStyle" TargetType="Button">

<Setter Property="Height" Value="40"/>

<Setter Property="Width" Value="100"/>

<Style.Triggers>

<Trigger Property="IsMouseOver" Value="True">

<Trigger.EnterActions>

<BeginStoryboard>

Поделиться с друзьями: