Триггеры в .NET MAUI. Триггеры свойств

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

У этого триггера определены следующий свойства:

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

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии