Stepper
Interfejs użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) Stepper umożliwia wybranie wartości liczbowej z zakresu wartości. Składa się z dwóch przycisków oznaczonych znakami minus i plus. Te przyciski można manipulować przez użytkownika, aby przyrostowo wybrać double
wartość z zakresu wartości.
Definiuje Stepper cztery właściwości typu double
:
Increment
jest kwotą, o którą należy zmienić wybraną wartość, z wartością domyślną 1.Minimum
jest minimalną wartością zakresu z wartością domyślną 0.Maximum
jest maksymalną wartością zakresu z wartością domyślną 100.Value
to wartość kroku, która może zawierać zakres międzyMinimum
iMaximum
i ma wartość domyślną 0.
Wszystkie te właściwości są wspierane przez BindableProperty obiekty. Właściwość Value
ma domyślny tryb BindingMode.TwoWay
powiązania , co oznacza, że jest odpowiedni jako źródło powiązania w aplikacji korzystającej ze wzorca Model-View-ViewModel (MVVM).
Właściwość Stepper jest przekształcana Value
w taki sposób, aby mieściła się między Minimum
i Maximum
, włącznie. Minimum
Jeśli właściwość jest ustawiona na wartość większą niż Value
właściwość, Stepper właściwość ustawia Value
wartość Minimum
. Podobnie, jeśli Maximum
ustawiono wartość mniejszą niż Value
, Stepper właściwość ustawia Value
wartość na Maximum
. Wewnętrznie zapewnia Stepper , że Minimum
wartość jest mniejsza niż Maximum
. Jeśli wartość Minimum
lub Maximum
kiedykolwiek jest ustawiona tak, że Minimum
nie jest mniejsza niż Maximum
, zgłaszany jest wyjątek. Aby uzyskać więcej informacji na temat ustawiania Minimum
właściwości i Maximum
, zobacz Środki ostrożności.
StepperValueChanged
Definiuje zdarzenie, które jest zgłaszane, gdy Value
zmiany są wywoływane przez użytkownika za pomocą manipulacji Stepper użytkownikami lub, gdy aplikacja ustawia Value
właściwość bezpośrednio. Zdarzenie ValueChanged
jest również zgłaszane, gdy Value
właściwość jest konerced zgodnie z wcześniejszym opisem. ObiektValueChangedEventArgs
, który towarzyszy ValueChanged
zdarzeniu ma i NewValue
OldValue
, typu double
. W momencie wywoływanego zdarzenia wartość NewValue
jest taka sama jak Value
właściwość Stepper obiektu.
Tworzenie kroku
W poniższym przykładzie pokazano, jak utworzyć obiekt Stepperz dwoma Label obiektami:
<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>
W tym przykładzie Stepper parametr jest inicjowany Maximum
jako właściwość 360 i Increment
właściwość 30. Manipulowanie zmianami wybranej Stepper wartości przyrostowo między elementami Minimum
na Maximum
podstawie wartości Increment
właściwości. Drugi Label wyświetla tekst "(niezainicjowany)", dopóki Stepper nie zostanie zmanipulowany, co spowoduje, że pierwsze ValueChanged
zdarzenie zostanie podniesione.
Plik związany z kodem zawiera procedurę obsługi zdarzenia 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);
}
}
Procedura obsługi używa właściwości obiektu do ustawienia Rotation
właściwości pierwszego Label i używa string.Format
metody z właściwością NewValue
argumentów zdarzeń, aby ustawić Text
właściwość drugiego Labelobiektu :stepper
Value
Stepper ValueChanged
Program obsługi zdarzeń może również uzyskać Stepper wyzwalanie zdarzenia za pomocą argumentu sender
. Właściwość Value
zawiera bieżącą wartość:
double value = ((Stepper)sender).Value;
Stepper Jeśli obiekt otrzymał nazwę w pliku XAML z atrybutem x:Name
(na przykład "stepper"), program obsługi zdarzeń może odwoływać się bezpośrednio do tego obiektu:
double value = stepper.Value;
Odpowiedni kod języka C# do utworzenia elementu Stepper to:
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);
};
Powiązanie danych krokowego
Program ValueChanged
obsługi zdarzeń można wyeliminować za pomocą powiązania danych w celu reagowania na zmianę Stepper wartości:
<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>
W tym przykładzie Rotation
właściwość pierwszego Label jest powiązana Value
z właściwością Stepper, podobnie jak Text
właściwość drugiej Label ze specyfikacją StringFormat
. Po pierwszym wyświetleniu strony drugi Label wyświetla ciąg tekstowy z wartością . Aby wyświetlić tekst bez powiązania danych, należy w szczególności zainicjować Text
właściwość Label obiektu lub zasymulować wyzwalanie ValueChanged
zdarzenia przez wywołanie procedury obsługi zdarzeń z konstruktora klasy.
Środki ostrożności
Wartość Minimum
właściwości musi być zawsze mniejsza niż wartość Maximum
właściwości. Poniższy przykład kodu powoduje wystąpienie wyjątku Stepper :
// Throws an exception!
Stepper stepper = new Stepper
{
Minimum = 180,
Maximum = 360
};
Kompilator języka C# generuje kod, który ustawia te dwie właściwości w sekwencji, a gdy Minimum
właściwość jest ustawiona na 180, jest większa niż wartość domyślna Maximum
100. Można uniknąć wyjątku w tym przypadku, ustawiając Maximum
najpierw właściwość:
Stepper stepper = new Stepper
{
Maximum = 360,
Minimum = 180
};
W tym przykładzie ustawienie Maximum
wartości 360 nie jest problemem, ponieważ jest większe niż wartość domyślna Minimum
0. Po Minimum
ustawieniu wartość jest mniejsza niż Maximum
wartość 360.
Ten sam problem występuje w języku XAML. Ustaw właściwości w kolejności, która gwarantuje, że Maximum
wartość jest zawsze większa niż Minimum
:
<Stepper Maximum="360"
Minimum="180" ... />
Wartości i można ustawić Minimum
na liczby ujemne, ale tylko w kolejności, w której Minimum
wartość jest zawsze mniejsza niż Maximum
:Maximum
<Stepper Minimum="-360"
Maximum="-180" ... />
Właściwość Value
jest zawsze większa lub równa Minimum
wartości i mniejsza niż lub równa Maximum
. Jeśli Value
zostanie ustawiona wartość poza tym zakresem, wartość będzie zmuszana do leżenia w zakresie, ale nie zostanie zgłoszony żaden wyjątek. Na przykład ten kod nie zgłosi wyjątku:
Stepper stepper = new Stepper
{
Value = 180
};
Value
Zamiast tego właściwość jest zmuszana do Maximum
wartości 100.
Poprzedni przykład ma wartość Maximum
360 i Minimum
180:
Stepper stepper = new Stepper
{
Maximum = 360,
Minimum = 180
};
Gdy Minimum
jest ustawiona wartość 180, Value
wartość jest również ustawiona na 180.
ValueChanged
Jeśli program obsługi zdarzeń został dołączony w czasie, gdy Value
właściwość jest połączona z czymś innym niż jego domyślna wartość 0, ValueChanged
zostanie zgłoszone zdarzenie:
<Stepper ValueChanged="OnStepperValueChanged"
Maximum="360"
Minimum="180" />
Gdy Minimum
jest ustawiona wartość 180, Value
jest również ustawiona na 180, a ValueChanged
zdarzenie jest zgłaszane. Może się to zdarzyć przed utworzeniem pozostałej części strony, a program obsługi może próbować odwołać się do innych elementów na stronie, które nie zostały jeszcze utworzone. Możesz dodać kod do ValueChanged
programu obsługi, który sprawdza null
wartości innych elementów na stronie. Można też ustawić procedurę ValueChanged
obsługi zdarzeń po Stepper zainicjowaniu wartości.