共用方式為


滑桿

.NET 多平臺應用程式 UI (.NET MAUI) Slider 是水平橫條,您可以操作以從連續範圍選取 double 值。

Slider 會定義下列屬性:

  • Minimum類型 double為的 ,是範圍最小值,預設值為 0。
  • Maximum類型 double為的 ,是範圍上限,預設值為1。
  • Value類型double為的 ,是滑桿的值,可介於和 Maximum 之間Minimum,且預設值為 0。
  • MinimumTrackColor類型 Color為 的 ,是拇指左側的橫條色彩。
  • MaximumTrackColorColor別為的直方圖色彩。
  • ThumbColorColor別 為 ,是拇指色彩。
  • ThumbImageSourceImageSource別 為 的影像,是用於型 ImageSource別 的拇指影像。
  • DragStartedCommand,類型 ICommand為 ,其會在拖曳動作的開頭執行。
  • DragCompletedCommand類型 ICommand為 ,其會在拖曳動作的結尾執行。

這些屬性是由 BindableProperty 物件所支援。 屬性 Value 的默認系結模式 BindingMode.TwoWay為 ,這表示它適合做為使用Model-View-ViewModel (MVVM) 模式之應用程式中的系結來源。

注意

ThumbColorThumbImageSource 屬性互斥。 如果同時設定這兩個屬性,屬性 ThumbImageSource 會優先使用。

Value強制Slider屬性,使其介於和 Maximum之間Minimum,並包含 。 如果 屬性 Minimum 設定為大於 Value 屬性的值,會將 Slider Value 屬性設定為 Minimum。 同樣地,如果 Maximum 設定為小於 Value的值,則將 Slider 屬性設定 ValueMaximum。 在內部, Slider 可確保 Minimum 小於 Maximum。 如果 Minimum 已設定 或 Maximum ,使其 Minimum 不小於 Maximum,則會引發例外狀況。 如需設定 MinimumMaximum 屬性的詳細資訊,請參閱 預防措施

Slider定義ValueChanged透過使用者操作 Slider 或程式直接設定 Value 屬性時Value所引發的事件。 ValueChanged當 屬性強制執行時Value,也會引發 事件,如上一段所述。 事件 ValueChangedEventArgs 隨附 ValueChanged 的物件具有 OldValueNewValue 屬性,類型為 double。 在引發事件時, NewValue 的值會與 Value 對象的屬性 Slider 相同。

Slider 也會定義 DragStartedDragCompleted 事件,這些事件會在拖曳動作的開頭和結尾引發。 ValueChanged與事件不同,DragStartedDragCompleted 事件只會透過使用者操作 Slider引發。 DragStarted當事件引發時,DragStartedCommand會執行 類型 ICommand為的 。 同樣地,當事件引發時 DragCompletedDragCompletedCommand會執行 類型 ICommand為 的 。

警告

請勿使用、 StartEndSlider不受限制的水準版面配置選項Center。 保留的預設HorizontalOptions設定,且不要在配置中時SliderGrid使用的寬度AutoFill

建立滑桿

下列範例示範如何建立 具有兩LabelSlider物件的 。

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

在此範例中, Slider 初始化 為具有 Maximum 360 的 屬性。 第二個 Label 會顯示文字 “(uninitialized)”,直到 Slider 被操作,這會導致引發第一個 ValueChanged 事件。

程式代碼後置檔案包含 事件的處理程式 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);
    }
}

ValueChangedSlider處理程式會使用 Value 物件的 屬性slider來設定Rotation第一個 Label 的 屬性,並使用 String.Format 方法搭配NewValue事件自變數的 屬性來設定Text第二Label個 的屬性:

.NET MAUI Slider screenshot.

事件處理程式也可以透過 sender 自變數取得Slider引發事件的 。 屬性 Value 包含目前的值:

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

Slider如果物件在具有屬性的 XAML 檔案x:Name中指定名稱(例如 “slider”),則事件處理程式可以直接參考該物件:

double value = slider.Value;

用於建立的 Slider 對等 C# 程式代碼為:

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);
};

數據系結滑桿

ValueChanged您可以使用資料系結來回應Slider值變更,來消除事件處理程式:

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

在此範例中, Rotation 第一個 Label 的屬性會系結至 ValueSlider屬性,如同 Text 第二 LabelStringFormat 具有規格的 屬性。 第一次出現頁面時,第二個 Label 頁面會顯示具有 值的文字字串。 若要顯示沒有數據系結的文字,您必須從類別建構函式呼叫事件處理程式,特別初始化 TextLabel 屬性,或模擬 ValueChanged 引發事件。

預防措施

屬性的值 Minimum 必須永遠小於 屬性的值 Maximum 。 下列範例會導致 Slider 引發例外狀況:

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

C# 編譯程式會產生程式代碼,依序設定這兩個屬性,當 屬性設定為 10 時 Minimum ,其大於預設值 Maximum 1。 您可以先設定 屬性來 Maximum 避免此案例中的例外狀況:

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

在此範例中,將設為 Maximum 20 不是問題,因為它大於預設值 Minimum 0。 設定時 Minimum ,值小於 Maximum 20 的值。

XAML 中存在相同的問題。 屬性必須依確保 Maximum 一律大於 Minimum的順序進行設定:

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

您可以將 與 Maximum 值設定Minimum為負數,但只能以一律小於Maximum的順序Minimum設定為 :

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

屬性 Value 一律大於或等於 Minimum 值,且小於或等於 Maximum。 如果 Value 設定為超出該範圍的值,則會強制值位於該範圍內,但不會引發例外狀況。 例如,下列範例不會引發例外狀況:

Slider slider = new Slider
{
    Value = 10
};

相反地,屬性 Value 會強制設為 Maximum 1的值。

先前的範例設定為 20,並將 Minimum 設定Maximum為 10:

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

Minimum 設定為 10 時,也會 Value 設定為 10。

ValueChanged如果屬性強制附加至其預設值 0 以外的專案時Value附加事件處理程式,則會ValueChanged引發事件:

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

Minimum 設定為 10 時, Value 也會設定為 10,並 ValueChanged 引發事件。 這可能會在建構頁面的其餘部分之前發生,而且處理程式可能會嘗試參考尚未建立之頁面上的其他元素。 您可能會想要將某些程式代碼新增至處理程式, ValueChanged 以檢查 null 頁面上其他元素的值。 或者,您可以在初始化值之後Slider設定ValueChanged事件處理程式。