В .NET MAUI используются три вида переключателей: CheckBox — обычный переключатель (флажок), Switch — кнопка-переключатель и RadioButton — кнопка-переключатель с возможностью выбора одного из предложенных вариантов. Сегодня мы рассмотрим возможности работы с первыми двумя из них в нашем приложении .NET MAUI.
Переключатель CheckBox
CheckBox предоставляет нам следующие свойства:
| Свойство | Тип | Описание |
IsChecked |
bool |
Указывает выключен ли флажок или CheckBox находится в выключенном состоянии |
Color |
Color |
Цвет флажка |
А также одно событие
public event EventHandler? CheckedChanged;
благодаря которому мы можем отслеживать переключение флажка. Продемонстрируем работу с CheckBox. Создайте новое приложение .NET MAUI и вначале измените код файла MainPage.xaml следующим образом:
<?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="MauiApp8.MainPage">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="32"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
</Grid.RowDefinitions>
<CheckBox HorizontalOptions="Start"
Color="Red"
Grid.Row="0"
Grid.Column="0"
CheckedChanged="OnCheckedChange"></CheckBox>
<Label x:Name="label"
HorizontalOptions="Start"
VerticalOptions="Center"
Grid.Row="0" Grid.Column="1">Включить красный цвет</Label>
</Grid>
</ContentPage>
Обратите внимание на то, что в CheckBox нет поддержки содержимого. Поэтому, чтобы обозначить цель переключения CheckBox мы используем конструкцию с контейнером Grid (можно и с любым другим, например, StackLayout), в котором размещаем сначала флажок, а затем — метку (Label). Наше приложение теперь будет выглядеть следующим образом: 
Теперь добавим обработчик события CheckedChanged в файл отдельного кода. Перейдем в файл MainPage.xaml.cs и добавим новый обработчик:
namespace MauiApp8
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
//обработчик события
public void OnCheckedChange(object sender, CheckedChangedEventArgs e)
{
if (e.Value) //флажок выбран
{
label.TextColor = Color.FromRgb(255, 0, 0);
}
else
{
label.TextColor = Color.FromRgb(0, 0, 0);
}
}
}
}
Здесь в аргументах обработчика CheckedChangedEventArgs мы получаем значение Value, которое указывает выбран ли CheckBox или нет и, в зависимости от результата, мы меняем цвет текста метки на красный или черный (по умолчанию). Теперь можно запустить приложение и убедиться, что метка меняет цвет текста:
Можно также по умолчанию сделать CheckBox включенным, изменив его свойство IsChecked, например, непосредственно в XAML-коде:
<CheckBox HorizontalOptions="Start"
Color="Red"
IsChecked="true"
CheckedChanged="OnCheckedChange"></CheckBox>
Переключатель Switch
Переключатель Switch по своей работе похож на CheckBox — он также может находиться в состоянии «Включен» или «Выключен». При этом Switch отличается от CheckBox внешним видом — это уже не флажок, а полноценная кнопка переключатель. Switch предоставляет нам следующие свойства:
| Свойство | Тип | Описание |
IsToggled |
bool |
Возвращает состояние переключателя (true — включен, false — выключен) |
OnColor |
Color |
Цвет переключателя во включенном состоянии |
ThumbColor |
Color |
Цвет переключателя |
Как и CheckBox, Switch предоставляет нам событие переключения:
public event EventHandler<ToggledEventArgs> Toggled;
Воспользуемся компонентом Switch в нашем приложении. Перепишем код XAML следующим образом:
<?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="MauiApp8.MainPage">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="48"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="32"/>
</Grid.RowDefinitions>
<Switch HorizontalOptions="Start"
VerticalOptions="Center"
OnColor="Red"
Grid.Row="0"
Grid.Column="0"
IsToggled="true"
ThumbColor="Green"
Toggled="OnToggled"/>
<Label x:Name="label"
HorizontalOptions="Start"
VerticalOptions="Center"
TextColor="Red"
Grid.Row="0" Grid.Column="1">Включить красный цвет</Label>
</Grid>
</ContentPage>
Здесь OnToggled — это обработчик события в файле отдельного кода, который выглядит следующим образом:
//обработчик события
public void OnToggled(object sender, ToggledEventArgs args)
{
if (args.Value)
{
label.TextColor = Color.FromRgb(255, 0, 0);
}
else
{
label.TextColor = Color.FromRgb(0, 0, 0);
}
}
Запустим приложение и посмотрим на результат. Так выглядит приложение при запуске:
По умолчанию Switch включен. После выключения Switch приложение будет выглядеть следующим образом:
Итого
Компоненты CheckBox и Switch схожи по своему действию. Оба компонента могут находиться в двух состояниях: включен или выключен. Также оба компонента предоставляют нам событие с помощью которого мы можем отслеживать состояние переключателя. Основное различие заключается во внешнем виде: если CheckBox — это обычный «флажок», то Switch — это полноценная кнопка, для которой мы можем установить два цвета (цвет самого переключателя и цвет заливки компонента во включенном состоянии.

