Шаговый переключатель
Пользовательский интерфейс многоплатформенного приложения .NET (.NET MAUI) Stepper позволяет выбрать числовое значение из диапазона значений. Он состоит из двух кнопок, помеченных знаками минуса и плюса. Эти кнопки можно управлять пользователем, чтобы постепенно выбрать double
значение из диапазона значений.
Определяет Stepper четыре свойства типа double
:
Increment
— это сумма для изменения выбранного значения по умолчанию со значением 1.Minimum
— минимальное значение диапазона с значением по умолчанию 0.Maximum
— максимальное значение диапазона с значением по умолчанию 100.Value
— это значение шага, которое может варьироваться междуMinimum
иMaximum
имеет значение по умолчанию 0.
Все эти свойства поддерживаются объектами BindableProperty . Свойство Value
имеет режим BindingMode.TwoWay
привязки по умолчанию, что означает, что он подходит в качестве источника привязки в приложении, использующем шаблон Model-View-ViewModel (MVVM).
Принуживает Stepper Value
свойство таким образом, чтобы оно было между Minimum
и Maximum
, включительно. Minimum
Если для свойства задано значение, большее, чем Value
свойство, Stepper задает Value
значение Minimum
свойства. Аналогичным образом, если Maximum
задано значение меньше Value
, то Stepper свойство имеет значение Value
Maximum
. Внутри системы гарантирует, Stepper что Minimum
меньше Maximum
. Если Minimum
или Maximum
когда-либо заданы таким образом, что Minimum
не меньше Maximum
, возникает исключение. Дополнительные сведения о настройке Minimum
и Maximum
свойствах см. в разделе "Меры предосторожности".
StepperValueChanged
определяет событие, возникающее при Value
изменении, либо с помощью пользовательской манипуляции Stepper с этим свойством, либо при непосредственном установке Value
свойства. Событие ValueChanged
также возникает, когда Value
свойство принудилось, как описано ранее. Объект ValueChangedEventArgs
, который сопровождает ValueChanged
событие, имеет OldValue
и NewValue
имеет тип double
. Во время создания события значение совпадает со Value
свойством NewValue
Stepper объекта.
Создание шага
В следующем примере показано, как создать объект Stepperс двумя Label объектами:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="StepperDemo.BasicStepperXAMLPage"
Title="Basic Stepper XAML">
<StackLayout Margin="20">
<Label x:Name="_rotatingLabel"
Text="ROTATING TEXT"
FontSize="18"
HorizontalOptions="Center"
VerticalOptions="Center" />
<Stepper Maximum="360"
Increment="30"
HorizontalOptions="Center"
ValueChanged="OnStepperValueChanged" />
<Label x:Name="_displayLabel"
Text="(uninitialized)"
HorizontalOptions="Center"
VerticalOptions="Center" />
</StackLayout>
</ContentPage>
В этом примере Stepper инициализировано Maximum
свойство 360 и Increment
свойство 30. Управление Stepper изменениями выбранного Increment
значения увеличивается между Minimum
Maximum
значениями на основе значения свойства. Label Второй отображает текст "(неинициализировано)" до тех пор, пока не Stepper будет манипулировано, что приводит к возникновению первого ValueChanged
события.
Файл программной части содержит обработчик события ValueChanged
:
public partial class BasicStepperXAMLPage : ContentPage
{
public BasicStepperXAMLPage()
{
InitializeComponent();
}
void OnStepperValueChanged(object sender, ValueChangedEventArgs e)
{
double value = e.NewValue;
_rotatingLabel.Rotation = value;
_displayLabel.Text = string.Format("The Stepper value is {0}", value);
}
}
Обработчик ValueChanged
Stepper объекта использует Value
свойство объекта для задания свойства stepper
первого и использует string.Format
метод со NewValue
свойством аргументов события, чтобы задать Text
Rotation
свойство второго Label Label:
Кроме того, обработчик событий может получить Stepper событие с помощью аргумента sender
. Свойство Value
содержит текущее значение:
double value = ((Stepper)sender).Value;
Stepper Если объект был присвоен имя в XAML-файле с атрибутом x:Name
(например, stepper), обработчик событий может ссылаться непосредственно на этот объект:
double value = stepper.Value;
Эквивалентный код C# для создания Stepper :
Stepper stepper = new Stepper
{
Maximum = 360,
Increment = 30,
HorizontalOptions = LayoutOptions.Center
};
stepper.ValueChanged += (sender, e) =>
{
rotationLabel.Rotation = stepper.Value;
displayLabel.Text = string.Format("The Stepper value is {0}", e.NewValue);
};
Привязка данных к шагу
Обработчик ValueChanged
событий можно устранить с помощью привязки данных для реагирования на Stepper изменение значения:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="StepperDemo.BasicStepperBindingsPage"
Title="Basic Stepper Bindings">
<StackLayout Margin="20">
<Label Text="ROTATING TEXT"
Rotation="{Binding Source={x:Reference _stepper}, Path=Value}"
FontSize="18"
HorizontalOptions="Center"
VerticalOptions="Center" />
<Stepper x:Name="_stepper"
Maximum="360"
Increment="30"
HorizontalOptions="Center" />
<Label Text="{Binding Source={x:Reference _stepper}, Path=Value, StringFormat='The Stepper value is {0:F0}'}"
HorizontalOptions="Center"
VerticalOptions="Center" />
</StackLayout>
</ContentPage>
В этом примере Rotation
свойство первого привязано к Value
свойству Stepper, как Text
и свойство второго Label Label со StringFormat
спецификацией. При первом появлении страницы вторая Label отображает текстовую строку со значением. Чтобы отобразить текст без привязки данных, необходимо специально инициализировать Text
свойство Label события или имитировать запуск ValueChanged
события путем вызова обработчика событий из конструктора класса.
Меры предосторожности
Значение Minimum
свойства всегда должно быть меньше значения Maximum
свойства. В следующем примере кода возникает Stepper исключение:
// Throws an exception!
Stepper stepper = new Stepper
{
Minimum = 180,
Maximum = 360
};
Компилятор C# создает код, который задает эти два свойства в последовательности, и если Minimum
свойство имеет значение 180, оно больше значения по умолчанию Maximum
100. Чтобы избежать исключения в этом случае, сначала задав Maximum
свойство:
Stepper stepper = new Stepper
{
Maximum = 360,
Minimum = 180
};
В этом примере значение Maximum
360 не является проблемой, так как значение по умолчанию Minimum
больше 0. Если Minimum
задано, значение меньше Maximum
360.
Та же проблема существует в XAML. Задайте свойства в порядке, обеспечивающем, что Maximum
всегда больше Minimum
:
<Stepper Maximum="360"
Minimum="180" ... />
Можно задать Minimum
отрицательные числа и Maximum
значения, но только в порядке, где Minimum
всегда меньше Maximum
:
<Stepper Minimum="-360"
Maximum="-180" ... />
Свойство Value
всегда больше или равно значению Minimum
и меньше или равно Maximum
. Если Value
задано значение за пределами этого диапазона, значение будет принудиться к тому, чтобы лежать в диапазоне, но исключение не возникает. Например, этот код не вызывает исключение:
Stepper stepper = new Stepper
{
Value = 180
};
Вместо этого Value
свойство принудается к значению Maximum
100.
Предыдущий пример имеет Maximum
значение 360 и Minimum
180:
Stepper stepper = new Stepper
{
Maximum = 360,
Minimum = 180
};
Если Minimum
задано значение 180, то Value
также задано значение 180.
ValueChanged
Если обработчик событий был присоединен во время Value
принудителя свойства к чему-либо, отличному от значения по умолчанию 0, ValueChanged
создается событие:
<Stepper ValueChanged="OnStepperValueChanged"
Maximum="360"
Minimum="180" />
Если Minimum
задано значение 180, Value
также задано значение 180, а ValueChanged
событие вызывается. Это может произойти до создания остальной части страницы, и обработчик может попытаться ссылаться на другие элементы на странице, которые еще не созданы. Может потребоваться добавить код в ValueChanged
обработчик, который проверка для null
значений других элементов на странице. Кроме того, можно задать ValueChanged
обработчик событий после инициализации значений Stepper .