Триггеры событий представлены типом EventTrigger и вызываются в ответ на события элемента.
Для применения триггера событий вначале надо создать действие, которое будет вызываться триггером и которое представляет класс TriggerAction.
Итак, добавим в наш проект следующий класс:
public class EntryValidation : TriggerAction<Entry> { protected override void Invoke(Entry sender) { if (!int.TryParse(sender.Text, out var number)) sender.TextColor = Colors.Red; else sender.TextColor = Colors.Green; } }
Действие триггера должно реализовать обощенный класс TriggerAction<T>, где
параметр T
представляет тип элементов, к которым применяется триггер (в данном случае это тип Entry).
Для определения выполняемого действия необходимо переопределить метод Invoke(), который будет вызываться при генерации события триггера.
В данном случае мы будем ожидать ввод только цифр в поле 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" xmlns:local="clr-namespace:HelloApp" x:Class="HelloApp.MainPage"> <StackLayout Padding="20"> <Entry> <Entry.Triggers> <EventTrigger Event="TextChanged"> <local:EntryValidation /> </EventTrigger> </Entry.Triggers> </Entry> </StackLayout> </ContentPage>
Триггер событий также, как и триггер свойств, добавляется в коллекцию Triggers
элемента, только теперь он представлен объектом EventTrigger.
Атрибут Event
этого объекта указывает на событие, при возникновении которого будет вызываться триггер. В данном случае это событие
TextChanged
, то есть изменение текста в поле Entry.
И в самом EventTrigger определяется наше действие EntryValidation.
В итоге, если мы введем в поле нецифровые символы, то это цвет текста в поле окрасится в красный цвет:
Аналогичное применение триггера событий в коде C#:
public partial class StartPage : ContentPage { public StartPage() { Entry entry = new Entry(); var trigger = new EventTrigger() { Event = "TextChanged" }; trigger.Actions.Add(new EntryValidation()); entry.Triggers.Add(trigger); Content = new StackLayout { Children = { entry } }; } }
Вначале собственно создается триггер - объект EventTrigger, и с помощью свойства Event
у него устанавливается событие.
Далее в коллекцию Actions
в триггере добавляется объект EntryValidation, а затем сам триггер добавляется в коллекцию Triggers у элемента Entry.