Содержание
Элемент 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.
