Наиболее простое и общее определение, что такое «триггер» можно сформулировать так — это некий фактор (механизм, событие), который приводит к началу некоего процесса. Например, триггером для начала написания этого руководства для меня стало желание структурировать всю изученную информацию про .NET MAUI. То есть, триггер — желание, процесс — написание руководства. Применительно к .NET MAUI, триггер — это механизм декларативного описания в XAML действий, которые изменяют внешний вид элементов управления в зависимости от событий или изменений данных. В .NET MAUI выделяют несколько видов триггеров — это триггеры свойств, триггеры данных, триггеры событий, триггеры состояния и мульти-триггеры. В этом разделе мы изучим и применим на практике все виды триггеров и начнем с наиболее простых — триггеров свойств.
Триггеры свойств
Триггер свойств — это триггер, который применяет значения для свойств визуального элемента или выполняет действия, когда указанное свойство в триггере свойство соответствует заданному условию. Условно, триггер свойства — это механизм отслеживания свойств самого себя.
Триггер свойства задается с помощью объекта Trigger
и может размещаться либо непосредственно в элементе управления, либо в виде ресурса на уровне страницы или приложения. Рассмотрим следующий пример:
<Entry Placeholder="Это поле ввода поменяет цвет фона, как только получит фокус"> <Entry.Triggers> <Trigger TargetType="Entry" Property="IsFocused" Value="true"> <Trigger.Setters> <Setter Property="Background" Value="LightBlue"/> <Setter Property="PlaceholderColor" Value="DarkBlue"/> </Trigger.Setters> </Trigger> </Entry.Triggers> </Entry>
Здесь у элемента Entry
определен триггер свойства IsFocused
:
<Trigger TargetType="Entry" Property="IsFocused" Value="true">
У этого триггера определены следующий свойства:
Свойство | Тип | Описание |
Target |
Type |
Тип объекта к которому применяется триггер |
Property |
BindableProperty |
Свойство, изменение которого необходимо отслеживать |
Value |
object |
Значение свойства, при котором срабатывает триггер |
Setters |
IList<Setter> |
Список объектов типа Setter, которые изменяют внешний вид элемента (см. «Стили в .NET MAUI«) |
Таким образом, наш триггер можно прочитать следующим образом: как только свойство IsFocused
станет равным true, поменять цвет фона на LightBlue
, а цвет текста у PlaceholderColor
на DarkBlue
.
Так будет выглядеть Entry при запуске приложения:а так, когда получит фокус:
Триггеры свойств в стилях
Если мы хотим применить триггер свойства к нескольким элементам, то можно вынести его в стиль. Например, так:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="PropertyTrigger.MainPage"> <ContentPage.Resources> <ResourceDictionary> <Style TargetType="Entry"> <Style.Triggers> <Trigger TargetType="Entry" Property="IsFocused" Value="True"> <Trigger.Setters> <Setter Property="Background" Value="LightBlue"/> <Setter Property="PlaceholderColor" Value="DarkBlue"/> </Trigger.Setters> </Trigger> </Style.Triggers> </Style> </ResourceDictionary> </ContentPage.Resources> <ScrollView> <VerticalStackLayout Padding="30,0" Spacing="25"> <Entry Placeholder="Это поле ввода поменяет цвет фона, как только получит фокус"/> <Entry Placeholder="И это поле тоже"/> </VerticalStackLayout> </ScrollView> </ContentPage>
Теперь все элементы управления типа Entry
будут использовать триггер свойства
Итого
Триггеры свойств задаются с использованием объекта Trigger
и позволяют изменять внешний вид элемента управления в зависимости от изменения, какого-либо из свойств. Триггеры свойств можно выносить в стили и использовать один и тот же триггер в группе однотипных элементов.