Содержание
Элемент Picker
в .NET MAUI представляет собой обычный выпадающий список, адаптированный для работы на различных платформах. Визуально, Picker
представляет собой обычное текстовое поле наподобие Entry
, клик по которому открывает список элементов для выбора.
Свойства Picker
Элемент Picker
предоставляет нам следующие свойства для работы:
Свойство | Тип | Описание |
CharacterSpacing |
double |
Определяет интервал между символами текста |
FontAttributes, FontAutoScalingEnabled, FontFamily, FontSize |
Свойства для работы со шрифтом: оформление, масштабирование, семейство и размер шрифта. Подробное описание см. в этой части | |
ItemsSource |
IList |
Список отображаемых элементов |
Items |
IList |
Коллекция элементов списка только для чтения. Каждый элемент должен иметь тип string |
SelectedIndex |
int |
Индекс выбранного элемента (по умолчанию -1) |
SelectedItem |
object |
выбранный элемент (по умолчанию null ) |
ItemDisplayBinding |
BindingBase |
Если ItemSource содержит сложные объекты, то это ItemDisplayBinding устанавливает свойство объекта, значение которого будет отображаться в списке |
TextColor, TextTransform, HorizontalTextAlignment, VerticalTextAlignment |
Свойства для работы с текстом: цвет и регистр текста. Подробное описание см. в этой части | |
Title |
string |
Заголовок Picker |
TitleColor |
Color |
Цвет тзаголовка Picker |
Также Picker
предоставляет нам событие
public event EventHandler SelectedIndexChanged;
которое возникает каждый раз как только пользователь выбирает элемент в списке.
Заполнение Picker элементами в XAML
Заполнение Picker
элементами для выбора можно производить как непосредственно в XAML, так и динамически, например, в файле отдельного кода. Сейчас мы рассмотрим только один из способов заполнения Picker
элементами. Другие способы мы рассмотрим позднее, когда будем изучать привязку в .NET MAUI. Итак, создайте новое приложение .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="MauiApp7.MainPage"> <VerticalStackLayout> <Picker x:Name="MyPicker" Title="Список"> <Picker.ItemsSource> <x:Array Type="{x:Type x:String}"> <x:String>Опция 1</x:String> <x:String>Опция 2</x:String> <x:String>Опция 3</x:String> <x:String>Опция 4</x:String> </x:Array> </Picker.ItemsSource> </Picker> </VerticalStackLayout> </ContentPage>
Здесь мы заполняем Picker
четырьмя элементами. Обратите внимание на то, как мы в XAML передаем свойству ItemsSource
массив данных:
<x:Array Type="{x:Type x:String}"> <x:String>Опция 1</x:String> <x:String>Опция 2</x:String> <x:String>Опция 3</x:String> <x:String>Опция 4</x:String> </x:Array>
x:Array
— это расширение разметки из пространства имен xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
, которое позволяет задавать непосредственно в коде XAML массив элементов. Для того, чтобы определить тип элементов массива мы используем ещё одно расширение — x:Type
с параметром в котором указываем ключевое слово XAML — x:String
, означающее, что массив будет содержать строки. Далее, внутри тэга <x:Array>
мы перечисляем элементы массива, которые заключаем также в тэги, соответствующие типу элементов, то есть в <x:String>
. Так, используя пространство имен xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
мы можем определять различные данные в коде — числа, строки, массивы и т.д.
Теперь вернемся к нашему приложению. Вот как будет выглядеть наш список выбора:Нажмите на текстовое поле, чтобы раскрылся список:
После выбора элемента списка его имя будет показано в текстовом поле:
Альтернативным способом задания элементов Picker
является их определение в свойстве-списке Items
. Свойство Items
принимаем только элементы типа string
. В нашем случае, мы могли бы определить элементы Picker
следующим образом:
<Picker x:Name="MyPicker" Title="Список"> <Picker.Items> <x:String>Опция 1</x:String> <x:String>Опция 2</x:String> <x:String>Опция 3</x:String> <x:String>Опция 4</x:String> </Picker.Items> </Picker>
Обратите внимание на то, что здесь мы уже не указываем массив, а просто перечисляем строки, которые необходимо добавить в Picker
.
Picker
свойство ItemsSource
, то попытка добавить элемент в Items приведет к ошибке InvalidOperationException: The Items list cannot be manipulated if the ItemsSource property is set Заполнение Picker элементами в C#
Также мы можем заполнять список элементов Picker
непосредственно в коде. Например, воспользуемся файлом отдельного кода MainPage.xaml.cs и перепишем его следующим образом:
namespace MauiApp7 { public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); MyPicker.ItemsSource = new string[] {"Выбор 1", "Выбор 2", "Выбор 3", "Выбор 4" }; } } }
Теперь код 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="MauiApp7.MainPage"> <VerticalStackLayout> <Picker x:Name="MyPicker" Title="Список"/> </VerticalStackLayout> </ContentPage>
Запустим приложение и убедимся, что наш Picker
заполнен элементами, которые мы определили в коде C#:Аналогичным образом мы можем использовать и свойство
Items
.
Обработка события SelectedIndexChanged
Объявим в файле отдельного кода MainPage.xaml.cs следующий обработчик события:
public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); MyPicker.ItemsSource = new string[] {"Выбор 1", "Выбор 2", "Выбор 3", "Выбор 4" }; } //обработчик события public void OnSelectedIndexChanged(object sender, EventArgs args) { MyLabel.Text = $"Ваш выбор: {(string)(MyPicker.SelectedItem)}"; } }
и изменим код XAML страницы, добавив на неё новую метку и назначив наш обработчик событию Picker
:
<?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="MauiApp7.MainPage"> <VerticalStackLayout> <Picker x:Name="MyPicker" Title="Список" SelectedIndexChanged="OnSelectedIndexChanged"/> <Label x:Name="MyLabel"/> </VerticalStackLayout> </ContentPage>
Теперь запустим приложение и убедимся, что оно реагирует на выбор элемента в Picker
:
Итого
Элемент .NET MAUI Picker
представляет собой выпадающий список выбора из нескольких элементов. Для определения элементов в Picker
могут использоваться два свойства — ItemsSource
(предпочтительный вариант) и Items
(альтернативный вариант). При этом, ItemsSources
позволяет указывать в качестве элементов списка любые объекты, а Items — только строки. Для реагирования на изменение выбора в Picker используется событие SelectedIndexChanged
.