滑桿
.NET 多平臺應用程式 UI (.NET MAUI) Slider 是水平橫條,您可以操作以從連續範圍選取 double
值。
Slider 會定義下列屬性:
Minimum
類型double
為的 ,是範圍最小值,預設值為 0。Maximum
類型double
為的 ,是範圍上限,預設值為1。Value
類型double
為的 ,是滑桿的值,可介於和Maximum
之間Minimum
,且預設值為 0。MinimumTrackColor
類型 Color為 的 ,是拇指左側的橫條色彩。MaximumTrackColor
型 Color別為的直方圖色彩。ThumbColor
型 Color別 為 ,是拇指色彩。ThumbImageSource
型 ImageSource別 為 的影像,是用於型 ImageSource別 的拇指影像。DragStartedCommand
,類型 ICommand為 ,其會在拖曳動作的開頭執行。DragCompletedCommand
類型 ICommand為 ,其會在拖曳動作的結尾執行。
這些屬性是由 BindableProperty 物件所支援。 屬性 Value
的默認系結模式 BindingMode.TwoWay
為 ,這表示它適合做為使用Model-View-ViewModel (MVVM) 模式之應用程式中的系結來源。
注意
ThumbColor
和 ThumbImageSource
屬性互斥。 如果同時設定這兩個屬性,屬性 ThumbImageSource
會優先使用。
Value
強制Slider屬性,使其介於和 Maximum
之間Minimum
,並包含 。 如果 屬性 Minimum
設定為大於 Value
屬性的值,會將 Slider Value
屬性設定為 Minimum
。 同樣地,如果 Maximum
設定為小於 Value
的值,則將 Slider 屬性設定 Value
為 Maximum
。 在內部, Slider 可確保 Minimum
小於 Maximum
。 如果 Minimum
已設定 或 Maximum
,使其 Minimum
不小於 Maximum
,則會引發例外狀況。 如需設定 Minimum
和 Maximum
屬性的詳細資訊,請參閱 預防措施。
Slider定義ValueChanged
透過使用者操作 Slider 或程式直接設定 Value
屬性時Value
所引發的事件。 ValueChanged
當 屬性強制執行時Value
,也會引發 事件,如上一段所述。 事件 ValueChangedEventArgs
隨附 ValueChanged
的物件具有 OldValue
和 NewValue
屬性,類型為 double
。 在引發事件時, NewValue
的值會與 Value
對象的屬性 Slider 相同。
Slider 也會定義 DragStarted
和 DragCompleted
事件,這些事件會在拖曳動作的開頭和結尾引發。 ValueChanged
與事件不同,DragStarted
和 DragCompleted
事件只會透過使用者操作 Slider引發。 DragStarted
當事件引發時,DragStartedCommand
會執行 類型 ICommand為的 。 同樣地,當事件引發時 DragCompleted
, DragCompletedCommand
會執行 類型 ICommand為 的 。
警告
請勿使用、 Start
或 End
的Slider不受限制的水準版面配置選項Center
。 保留的預設HorizontalOptions
設定,且不要在配置中時SliderGrid使用的寬度Auto
Fill
。
建立滑桿
下列範例示範如何建立 具有兩Label個 Slider物件的 。
<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);
}
}
的ValueChanged
Slider處理程式會使用 Value
物件的 屬性slider
來設定Rotation
第一個 Label 的 屬性,並使用 String.Format
方法搭配NewValue
事件自變數的 屬性來設定Text
第二Label個 的屬性:
事件處理程式也可以透過 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 的屬性會系結至 Value
的 Slider屬性,如同 Text
第二 Label 個 StringFormat
具有規格的 屬性。 第一次出現頁面時,第二個 Label 頁面會顯示具有 值的文字字串。 若要顯示沒有數據系結的文字,您必須從類別建構函式呼叫事件處理程式,特別初始化 Text
的 Label 屬性,或模擬 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
事件處理程式。