Пользовательский интерфейс многоплатформенного приложения .NET (.NET MAUI) RadioButton — это тип кнопки, которая позволяет пользователям выбрать один вариант из набора. Каждый параметр представлен одной переключателем, и в группе можно выбрать только одну переключатель. По умолчанию каждый RadioButton отображает текст:
Однако на некоторых платформах может отображаться и Viewна всех платформах RadioButton внешний вид каждого из них RadioButton можно переопределять с помощью ControlTemplate:
Content, тип object, определяющий string или View отображаемый элементом RadioButton.
IsCheckedтип bool, который определяет, проверяется ли RadioButton проверка. Это свойство использует привязку TwoWay и имеет значение falseпо умолчанию.
GroupNameтип string, определяющий имя, указывающее, какие RadioButton элементы управления являются взаимоисключающими. Это свойство имеет значение nullпо умолчанию.
Valueтипа object, который определяет необязательное уникальное значение, связанное с RadioButton.
BorderColor, тип Color, определяющий цвет штриха границы.
BorderWidthdoubleтип , который определяет ширину RadioButton границы.
CharacterSpacingdoubleтипа, который определяет интервал между символами любого отображаемого текста.
CornerRadius, тип int, определяющий угол радиуса RadioButton.
FontAttributesтипа FontAttributes, который определяет стиль текста.
FontAutoScalingEnabledтип bool, определяющий, отражает ли пользовательский интерфейс приложения параметры масштабирования текста, заданные в операционной системе. Значение по умолчанию этого свойства равно true.
FontFamilyтип string, который определяет семейство шрифтов.
FontSizeтип double, определяющий размер шрифта.
TextColorтипа Color, который определяет цвет любого отображаемого текста.
TextTransformтипа TextTransform, который определяет регистр любого отображаемого текста.
Эти свойства поддерживаются объектами BindableProperty, то есть эти свойства можно указывать в качестве целевых для привязки и стилизации данных.
RadioButton также определяет событие, которое возникает CheckedChanged при IsChecked изменении свойства с помощью пользовательской или программной манипуляции. Объект CheckedChangedEventArgs , который сопровождает CheckedChanged событие, имеет одно свойство с именем Valueтипа bool. При возникновении события значение CheckedChangedEventArgs.Value свойства присваивается новому значению IsChecked свойства.
RadioButton Группирование можно управлять классом RadioButtonGroup , который определяет следующие присоединенные свойства:
GroupNamestringтипа, который определяет имя группы для RadioButton объектов в объектеILayout.
SelectedValueтипа object, который представляет значение проверяемого RadioButton объекта в ILayout группе. Это присоединенное свойство использует привязку TwoWay по умолчанию.
Совет
Хотя это не обязательно, настоятельно рекомендуется задать GroupName свойство, чтобы убедиться, что SelectedValue свойство работает правильно на всех платформах.
Дополнительные сведения о присоединенном GroupName свойстве см. в разделе Group RadioButtons. Дополнительные сведения о присоединенном SelectedValue свойстве см. в разделе "Ответ на изменения состояния RadioButton".
Создание RadioButtons
Внешний RadioButton вид определяется типом данных, назначенным свойству RadioButton.Content :
RadioButton.Content Если свойство назначеноstring, оно будет отображаться на каждой платформе, горизонтально выровненное рядом с кругом переключателя.
RadioButton.Content При назначении Viewон будет отображаться на поддерживаемых платформах (iOS, Windows), а неподдерживаемые платформы будут возвращены в строковое представление View объекта (Android). В обоих случаях содержимое отображается по горизонтали рядом с кругом переключателя.
Отображает RadioButton текст при Content назначении stringсвойства:
XAML
<StackLayout><LabelText="What's your favorite animal?" /><RadioButtonContent="Cat" /><RadioButtonContent="Dog" /><RadioButtonContent="Elephant" /><RadioButtonContent="Monkey"IsChecked="true" /></StackLayout>
В этом примере RadioButton объекты неявно группируются внутри одного родительского контейнера. Этот XAML приводит к отображению внешнего вида, показанного на следующем снимке экрана:
Отображение произвольного содержимого
В iOS и Windows RadioButton может отображаться произвольное содержимое при Content назначении Viewсвойства:
XAML
<StackLayout><LabelText="What's your favorite animal?" /><RadioButton><RadioButton.Content><ImageSource="cat.png" /></RadioButton.Content></RadioButton><RadioButton><RadioButton.Content><ImageSource="dog.png" /></RadioButton.Content></RadioButton><RadioButton><RadioButton.Content><ImageSource="elephant.png" /></RadioButton.Content></RadioButton><RadioButton><RadioButton.Content><ImageSource="monkey.png" /></RadioButton.Content></RadioButton></StackLayout>
В этом примере RadioButton объекты неявно группируются внутри одного родительского контейнера. Этот XAML приводит к отображению внешнего вида, показанного на следующем снимке экрана:
В Android RadioButton объекты будут отображать строковое представление объекта, заданного View в качестве содержимого.
Каждый RadioButton объект имеет Value свойство типа object, которое определяет необязательное уникальное значение для связывания с переключателем. Это позволяет отличаться от его содержимого RadioButton и особенно полезно при RadioButton отображении View объектов.
В следующем XAML показаны параметры Content и Value свойства для каждого RadioButton объекта:
XAML
<StackLayout><LabelText="What's your favorite animal?" /><RadioButtonValue="Cat"><RadioButton.Content><ImageSource="cat.png" /></RadioButton.Content></RadioButton><RadioButtonValue="Dog"><RadioButton.Content><ImageSource="dog.png" /></RadioButton.Content></RadioButton><RadioButtonValue="Elephant"><RadioButton.Content><ImageSource="elephant.png" /></RadioButton.Content></RadioButton><RadioButtonValue="Monkey"><RadioButton.Content><ImageSource="monkey.png" /></RadioButton.Content></RadioButton></StackLayout>
В этом примере каждый RadioButton имеет свое Image содержимое, а также определяет строковое значение. Это позволяет легко определить значение проверяемой переключателя.
Группа RadioButtons
Переключатели работают в группах, и существует три подхода к группировке переключателей:
Поместите их в один родительский контейнер. Это называется неявным группированием.
GroupName Задайте для свойства на каждой переключатель в группе одно и то же значение. Это называется явным группированием.
Задайте присоединенное RadioButtonGroup.GroupName свойство в родительском контейнере, который, в свою очередь, задает GroupName свойство любых RadioButton объектов в контейнере. Это также называется явным группированием.
Важно!
RadioButton Объекты не должны принадлежать одному родительскому элементу для группировки. Они являются взаимоисключающими при условии, что они совместно используют имя группы.
Явное группирование с помощью свойства GroupName
В следующем примере XAML показаны явные группировки RadioButton объектов, задав их GroupName свойства:
XAML
<LabelText="What's your favorite color?" /><RadioButtonContent="Red"GroupName="colors" /><RadioButtonContent="Green"GroupName="colors" /><RadioButtonContent="Blue"GroupName="colors" /><RadioButtonContent="Other"GroupName="colors" />
В этом примере каждый из них RadioButton является взаимоисключающим, так как он использует одно и то же GroupName значение.
Явное группирование с присоединенным свойством RadioButtonGroup.GroupName
Класс RadioButtonGroup определяет присоединенное GroupName свойство типа string, которое можно задать в объекте Layout<View> . Это позволяет превратить любой макет в группу переключателей:
XAML
<StackLayoutRadioButtonGroup.GroupName="colors"><LabelText="What's your favorite color?" /><RadioButtonContent="Red" /><RadioButtonContent="Green" /><RadioButtonContent="Blue" /><RadioButtonContent="Other" /></StackLayout>
В этом примере каждое RadioButtonStackLayout из этих свойств будет иметь значение GroupNamecolors, и будет взаимоисключающими.
Примечание
ILayout Когда объект, задающий RadioButtonGroup.GroupName присоединенное свойство, содержит RadioButton свойство, которое задает его GroupName свойство, значение RadioButton.GroupName свойства будет иметь приоритет.
Реагирование на изменения состояния RadioButton
Возможных состояния у переключателя два: установлен или не установлен. При проверке переключателя его IsChecked свойство равно true. Если переключатель снят, его IsChecked свойство имеет значение false. Переключатель можно очистить, нажав другую переключатель в той же группе, но ее нельзя очистить, нажав ее еще раз. При этом выбор переключателя можно отменить и программными средствами, установив для свойства IsChecked значение false.
Реагирование на срабатывание события
IsChecked При изменении свойства с помощью пользовательской или программной манипуляции событие запускаетсяCheckedChanged. Обработчик событий для этого события можно зарегистрировать для реагирования на изменения:
Аргумент sender отвечает RadioButton за это событие. Это можно использовать для доступа к объекту RadioButton или для различения нескольких RadioButton объектов, использующих один и тот же CheckedChanged обработчик событий.
Реагирование на изменение свойства
Класс RadioButtonGroup определяет присоединенное SelectedValue свойство типа object, которое можно задать для ILayout объекта. Это присоединенное свойство представляет значение проверяемого RadioButton в группе, определенной в макете.
IsChecked При изменении свойства с помощью пользовательской или программной манипуляции RadioButtonGroup.SelectedValue присоединенное свойство также изменяется. Таким образом, присоединенное RadioButtonGroup.SelectedValue свойство может быть привязано к свойству, в которой хранится выбор пользователя:
XAML
<ContentPage...xmlns:local="clr-namespace:RadioButtonDemos"x:DataType="local:AnimalViewModel"><StackLayoutMargin="10"RadioButtonGroup.GroupName="{Binding GroupName}"RadioButtonGroup.SelectedValue="{Binding Selection}"><LabelText="What's your favorite animal?" /><RadioButtonContent="Cat"Value="Cat" /><RadioButtonContent="Dog"Value="Dog" /><RadioButtonContent="Elephant"Value="Elephant" /><RadioButtonContent="Monkey"Value="Monkey"/><Labelx:Name="animalLabel"><Label.FormattedText><FormattedString><SpanText="You have chosen:" /><SpanText="{Binding Selection}" /></FormattedString></Label.FormattedText></Label></StackLayout></ContentPage>
В этом примере значение присоединенного RadioButtonGroup.GroupName свойства задается свойством GroupName в контексте привязки. Аналогичным образом значение присоединенного RadioButtonGroup.SelectedValue свойства задается свойством Selection в контексте привязки. Кроме того, Selection свойство обновляется до Value свойства проверенного RadioButton.
Визуальные состояния RadioButton
RadioButton объекты имеют Checked и Unchecked визуальные состояния, которые можно использовать для запуска визуального изменения при RadioButton проверке или отмене проверки.
В следующем примере XAML показано, как определить визуальное состояние для состояний и Unchecked состоянийChecked:
XAML
<ContentPage...><ContentPage.Resources><StyleTargetType="RadioButton"><SetterProperty="VisualStateManager.VisualStateGroups"><VisualStateGroupList><VisualStateGroupx:Name="CheckedStates"><VisualStatex:Name="Checked"><VisualState.Setters><SetterProperty="TextColor"Value="Green" /><SetterProperty="Opacity"Value="1" /></VisualState.Setters></VisualState><VisualStatex:Name="Unchecked"><VisualState.Setters><SetterProperty="TextColor"Value="Red" /><SetterProperty="Opacity"Value="0.5" /></VisualState.Setters></VisualState></VisualStateGroup></VisualStateGroupList></Setter></Style></ContentPage.Resources><StackLayout><LabelText="What's your favorite mode of transport?" /><RadioButtonContent="Car" /><RadioButtonContent="Bike" /><RadioButtonContent="Train" /><RadioButtonContent="Walking" /></StackLayout></ContentPage>
В этом примере неявный элемент Style направлен на объекты RadioButton. Указывает CheckedVisualState , что при RadioButton проверке его TextColor свойство будет иметь зеленый цвет со значением Opacity 1. Указывает UncheckedVisualState , что при RadioButton отключенном состоянии его TextColor свойство будет иметь красный цвет со Opacity значением 0,5. Таким образом, общий эффект заключается в том, что если RadioButton флажок снят, он красный и частично прозрачный, и зеленый без прозрачности при проверке:
Дополнительные сведения о визуальных состояниях см. в разделе "Визуальные состояния".
Изменение внешнего вида RadioButton
По умолчанию RadioButton объекты используют обработчики для использования собственных элементов управления на поддерживаемых платформах. RadioButton Однако визуальная структура может быть переопределена с помощью объектаControlTemplate, чтобы RadioButton объекты имели одинаковый внешний вид на всех платформах. Это возможно, так как RadioButton класс наследует от TemplatedView класса.
В следующем коде XAML показано ControlTemplate , что можно использовать для переопределений визуальной RadioButton структуры объектов:
В этом примере корневой элемент ControlTemplate объекта — это Border объект, определяющий Checked и Unchecked визуальные состояния. Объект Border использует сочетание Gridобъектов Ellipseи ContentPresenter объектов для определения визуальной RadioButtonструктуры объекта. В примере также содержится неявный стиль, который присваивает ControlTemplateRadioButtonTemplate свойству любых RadioButton объектов на странице.
Примечание
Объект ContentPresenter помечает расположение в визуальной структуре, где RadioButton будет отображаться содержимое.
В этом примере визуальная структура, определенная для каждой RadioButton из них, заменяется визуальной структурой, определенной в этом ControlTemplateпримере, и поэтому во время выполнения объекты в ControlTemplate станут частью визуального дерева для каждого из них RadioButton. Кроме того, содержимое для каждого из них RadioButton подставляется в определенный ContentPresenter в шаблоне элемента управления. Это приводит к следующему RadioButton виду:
Дополнительные сведения о шаблонах элементов управления см. в разделе "Шаблоны элементов управления".
Отключение RadioButton
Иногда приложение вводит состояние, в котором проверяемая RadioButton операция не является допустимой. В таких случаях RadioButton можно отключить, задав свойству IsEnabled значение false.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET MAUI
.NET MAUI — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.
Создайте пользовательский интерфейс с привязкой данных. Пользовательский интерфейс автоматически обновляется на основе последних данных, а данные обновляются в ответ на изменения в пользовательском интерфейсе.
Флажок .NET MAUI — это тип кнопки, которую можно проверить или пустую. Если флажок установлен, считается, что он включен. Если флажок пуст, он считается отключенным.
Узнайте, как использовать класс границы .NET MAUI Border, который является элементом управления контейнером, который рисует границу, фон или оба элемента управления вокруг другого элемента управления.