Udostępnij za pośrednictwem


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ędzy Minimum i Maximum 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.TwoWaypowią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 NewValueOldValue , 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

.NET MAUI Stepper screenshot.

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.