Udostępnij za pośrednictwem


Suwak

Interfejs użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) Slider to poziomy pasek, który można manipulować, aby wybrać double wartość z zakresu ciągłego.

Slider definiuje następujące właściwości:

  • Minimum, typu double, jest minimalnym zakresem z wartością domyślną 0.
  • Maximum, typu double, jest maksymalną wartością zakresu z wartością domyślną 1.
  • Value, typu double, jest wartością suwaka, która może zawierać zakres między Minimum i Maximum i ma wartość domyślną 0.
  • MinimumTrackColor, typu Color, to kolor paska po lewej stronie kciuka.
  • MaximumTrackColor, typu Color, to kolor paska po prawej stronie kciuka.
  • ThumbColor typu Color, jest kolorem kciuka.
  • ThumbImageSource, typu ImageSource, to obraz do użycia dla kciuka typu ImageSource.
  • DragStartedCommand, typu ICommand, który jest wykonywany na początku akcji przeciągania.
  • DragCompletedCommand, typu ICommand, który jest wykonywany na końcu akcji przeciągania.

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).

Uwaga

Właściwości ThumbColor i ThumbImageSource wzajemnie się wykluczają. Jeśli obie właściwości są ustawione, ThumbImageSource właściwość będzie mieć pierwszeństwo.

Właściwość Slider 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ść, Slider właściwość ustawia Value wartość Minimum. Podobnie, jeśli Maximum ustawiono wartość mniejszą niż Value, Slider właściwość ustawia Value wartość na Maximum. Wewnętrznie zapewnia Slider , ż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.

SliderValueChanged definiuje zdarzenie, które jest zgłaszane, gdy Value zmiany są wywoływane za pośrednictwem manipulowania Slider przez użytkownika obiektu lub, gdy program ustawia Value właściwość bezpośrednio. Zdarzenie ValueChanged jest również wywoływane, gdy Value właściwość jest konercowana zgodnie z opisem w poprzednim akapicie. Obiekt ValueChangedEventArgs , który towarzyszy ValueChanged zdarzeniu, ma OldValue właściwości i NewValue , typu double. W momencie wywoływanego zdarzenia wartość NewValue jest taka sama jak Value właściwość Slider obiektu.

Slider definiuje DragStarted DragCompleted również zdarzenia, które są wywoływane na początku i na końcu akcji przeciągania. ValueChanged W przeciwieństwie do zdarzenia zdarzenia zdarzenia DragStarted i DragCompleted są wywoływane tylko za pomocą manipulacji użytkownikami .Slider Gdy zdarzenie DragStarted jest uruchamiane, DragStartedCommandjest wykonywany typ ICommand, . Podobnie, gdy DragCompleted zdarzenie jest uruchamiane, DragCompletedCommandjest wykonywany typ , ICommand.

Ostrzeżenie

Nie należy używać nieobsługiwanych opcji układu poziomego , CenterStartlub End za pomocą polecenia Slider. Zachowaj ustawienie domyślne HorizontalOptions elementu Filli nie używaj szerokości Auto podczas umieszczania Slider Grid w układzie.

Tworzenie suwaka

W poniższym przykładzie pokazano, jak utworzyć obiekt Sliderz dwoma Label obiektami:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="SliderDemos.BasicSliderXamlPage"
             Title="Basic Slider XAML"
             Padding="10, 0">
    <StackLayout>
        <Label x:Name="rotatingLabel"
               Text="ROTATING TEXT"
               FontSize="18"
               HorizontalOptions="Center"
               VerticalOptions="Center" />
        <Slider Maximum="360"
                ValueChanged="OnSliderValueChanged" />
        <Label x:Name="displayLabel"
               Text="(uninitialized)"
               HorizontalOptions="Center"
               VerticalOptions="Center" />
    </StackLayout>
</ContentPage>

W tym przykładzie Slider zainicjowano Maximum właściwość 360. Drugi Label wyświetla tekst "(niezainicjowany)", dopóki Slider 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 BasicSliderXamlPage : ContentPage
{
    public BasicSliderXamlPage()
    {
        InitializeComponent();
    }

    void OnSliderValueChanged(object sender, ValueChangedEventArgs args)
    {
        double value = args.NewValue;
        rotatingLabel.Rotation = value;
        displayLabel.Text = String.Format("The Slider 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 :slider Value Slider ValueChanged

.NET MAUI Slider screenshot.

Program obsługi zdarzeń może również uzyskać Slider wyzwalanie zdarzenia za pomocą argumentu sender . Właściwość Value zawiera bieżącą wartość:

double value = ((Slider)sender).Value;

Slider Jeśli obiekt otrzymał nazwę w pliku XAML z atrybutem x:Name (na przykład "slider"), program obsługi zdarzeń może odwoływać się bezpośrednio do tego obiektu:

double value = slider.Value;

Odpowiedni kod języka C# do utworzenia elementu Slider to:

Slider slider = new Slider
{
    Maximum = 360
};
slider.ValueChanged += (sender, args) =>
{
    rotationLabel.Rotation = slider.Value;
    displayLabel.Text = String.Format("The Slider value is {0}", args.NewValue);
};

Powiązanie danych z suwakiem

Program ValueChanged obsługi zdarzeń można wyeliminować za pomocą powiązania danych w celu reagowania na zmianę Slider wartości:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="SliderDemos.BasicSliderBindingsPage"
             Title="Basic Slider Bindings"
             Padding="10, 0">
    <StackLayout>
        <Label Text="ROTATING TEXT"
               Rotation="{Binding Source={x:Reference slider},
                                  Path=Value}"
               FontSize="18"
               HorizontalOptions="Center"
               VerticalOptions="Center" />
        <Slider x:Name="slider"
                Maximum="360" />
        <Label x:Name="displayLabel"
               Text="{Binding Source={x:Reference slider},
                              Path=Value,
                              StringFormat='The Slider 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ą Slider, 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 powoduje wystąpienie wyjątku Slider :

// Throws an exception!
Slider slider = new Slider
{
    Minimum = 10,
    Maximum = 20
};

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 10, jest większa niż wartość domyślna Maximum 1. Można uniknąć wyjątku w tym przypadku, ustawiając Maximum najpierw właściwość:

Slider slider = new Slider
{
    Maximum = 20,
    Minimum = 10
};

W tym przykładzie ustawienie Maximum wartości 20 nie jest problemem, ponieważ jest większe niż wartość domyślna Minimum 0. Po Minimum ustawieniu wartość jest mniejsza niż Maximum wartość 20.

Ten sam problem występuje w języku XAML. Właściwości muszą być ustawione w kolejności, która gwarantuje, że Maximum wartość jest zawsze większa niż Minimum:

<Slider Maximum="20"
        Minimum="10" ... />

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

<Slider Minimum="-20"
        Maximum="-10" ... />

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 poniższy przykład nie zgłosi wyjątku:

Slider slider = new Slider
{
    Value = 10
};

Value Zamiast tego właściwość jest coerced na Maximum wartość 1.

W poprzednim przykładzie ustawiono wartość Maximum 20 i Minimum na 10:

Slider slider = new Slider
{
    Maximum = 20,
    Minimum = 10
};

Gdy Minimum jest ustawiona wartość 10, wartość Value jest również ustawiona na 10.

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:

<Slider ValueChanged="OnSliderValueChanged"
        Maximum="20"
        Minimum="10" />

Gdy Minimum wartość jest ustawiona na 10, Value jest również ustawiona na 10, 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 Slider zainicjowaniu wartości.