Наиболее простое и общее определение, что такое «триггер» можно сформулировать так — это некий фактор (механизм, событие), который приводит к началу некоего процесса. Например, триггером для начала написания этого руководства для меня стало желание структурировать всю изученную информацию про .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 и позволяют изменять внешний вид элемента управления в зависимости от изменения, какого-либо из свойств. Триггеры свойств можно выносить в стили и использовать один и тот же триггер в группе однотипных элементов.