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
, typudouble
, jest minimalnym zakresem z wartością domyślną 0.Maximum
, typudouble
, jest maksymalną wartością zakresu z wartością domyślną 1.Value
, typudouble
, jest wartością suwaka, która może zawierać zakres międzyMinimum
iMaximum
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.TwoWay
powią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, DragStartedCommand
jest wykonywany typ ICommand, . Podobnie, gdy DragCompleted
zdarzenie jest uruchamiane, DragCompletedCommand
jest wykonywany typ , ICommand.
Ostrzeżenie
Nie należy używać nieobsługiwanych opcji układu poziomego , Center
Start
lub End
za pomocą polecenia Slider. Zachowaj ustawienie domyślne HorizontalOptions
elementu Fill
i 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
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.