Aracılığıyla paylaş


Kaydırıcı

.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI), Slider sürekli aralıktan bir double değer seçmek için değiştirebileceğiniz yatay bir çubukdur.

Slider aşağıdaki özellikleri tanımlar:

  • Minimum, varsayılan doubledeğeri 0 olan aralığın en küçük değeridir.
  • Maximum, türündeki doublearalığın en büyük değeridir ve varsayılan değeri 1'dir.
  • Value, ve doublearasında MinimumMaximum aralık oluşturabilen ve varsayılan değeri 0 olan kaydırıcının değeridir.
  • MinimumTrackColor, türünde Color, başparmak sol tarafındaki çubuk rengidir.
  • MaximumTrackColor, türünde Color, başparmak sağ tarafındaki çubuk rengidir.
  • ThumbColor türünde Color, başparmak rengidir.
  • ThumbImageSource, türünde ImageSource, başparmak için kullanılacak görüntüdür ve türündedir ImageSource.
  • DragStartedCommand, türündedir ICommandve sürükleme eyleminin başında yürütülür.
  • DragCompletedCommand, türündedir ICommandve sürükleme eyleminin sonunda yürütülür.

Bu özellikler nesneler tarafından BindableProperty desteklenir. özelliği varsayılan Value bağlama moduna BindingMode.TwoWaysahiptir. Bu, Model-View-ViewModel (MVVM) desenini kullanan bir uygulamada bağlama kaynağı olarak uygun olduğu anlamına gelir.

Dekont

ThumbColor ve ThumbImageSource özellikleri birbirini dışlar. Her iki özellik de ayarlanırsa, ThumbImageSource özellik öncelikli olur.

Value özelliği Slider ile arasında MinimumMaximumolacak şekilde zorlamalı olarak gerçekleştirir. Minimum özelliği özelliğinden Value büyük bir değere ayarlanırsa, Slider özelliği olarak MinimumayarlanırValue. Benzer şekilde, değerinden SliderValueküçük bir değere ayarlanırsa Maximum özelliğini olarak MaximumayarlarValue. dahili olarak, değerinden Slider küçük Maximumolmasını Minimum sağlar. veya Maximum değeri değerinden Minimum küçük Maximumolmayacak şekilde ayarlanırsa Minimum bir özel durum oluşturulur. ve özelliklerini ayarlama Minimum hakkında daha fazla bilgi için bkz. Önlemler.Maximum

Slider, kullanıcı tarafından Slider veya program özelliği doğrudan ayarlarken Value değişiklik yapıldığında Value tetiklenen bir ValueChanged olayı tanımlar. ValueChanged Özelliği önceki paragrafta Value açıklandığı gibi zorunlu olduğunda da bir olay tetiklenir. Olaya ValueChangedEventArgs eşlik ValueChanged eden nesnenin türünde doubleve NewValue özellikleri vardırOldValue. Olay tetiklendiğinde değeri NewValue nesnesinin Value özelliğiyle Slider aynıdır.

Sliderayrıca, sürükleme eyleminin başında ve sonunda tetiklenen ve DragCompleted olaylarını tanımlarDragStarted. olayından ValueChangedDragStarted farklı olarak ve DragCompleted olayları yalnızca kullanıcı tarafından gerçekleştirilen işleme Slideryoluyla oluşturulur. DragStarted Olay tetiklendiğinde türündeki DragStartedCommandICommand, yürütülür. Benzer şekilde, olay tetiklendiğinde DragCompleted türündeki DragCompletedCommandICommand, yürütülür.

Uyarı

, Startveya End ile Slidersınırlandırılmamış yatay düzen seçeneklerini Centerkullanmayın. varsayılan HorizontalOptions ayarını Fillkoruyun ve bir düzen eklerken GridSlider öğesinin Auto genişliğini kullanmayın.

Kaydırıcı Oluşturma

Aşağıdaki örnekte, iki Label nesne içeren bir Slideröğesinin nasıl oluşturulacağı gösterilmektedir:

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

Bu örnekte, Slider özelliği 360 olacak şekilde Maximum başlatılır. İkinciLabel, "(başlatılmamış)" metnini, ilk olayın tetiklenmelerine neden ValueChanged olacak şekilde işlenene kadar Slider görüntüler.

Arka planda kod dosyası olayın işleyicisini ValueChanged içerir:

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

işleyicisiSlider, birincinin Label özelliğini ayarlamak Rotation için nesnesinin slider özelliğini kullanır Value ve ikinci Labelöğesinin özelliğini ayarlamak Text için olay bağımsız değişkenlerinin özelliğiyle NewValue yöntemini kullanırString.Format:ValueChanged

.NET MAUI Slider screenshot.

Olay işleyicisinin bağımsız değişken aracılığıyla sender olayı tetikleyen öğesini alması Slider da mümkündür. Value özelliği geçerli değeri içerir:

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

Nesneye Slider XAML dosyasında özniteliği olan bir x:Name ad (örneğin, "kaydırıcı") verilmişse olay işleyicisi bu nesneye doğrudan başvurabilir:

double value = slider.Value;

oluşturmak Slider için eşdeğer C# kodu şu şekildedir:

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

Veri bağlama kaydırıcısı

Olay işleyicisi ValueChanged , değişen değere yanıt vermek Slider için veri bağlama kullanılarak ortadan kaldırılabilir:

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

Bu örnekte, birincinin Label özelliği, belirtim içeren ikincinin StringFormatLabel özelliği Slidergibi Text öğesinin özelliğine bağlıdırValue.Rotation Sayfa ilk kez göründüğünde, ikinci Label değerle birlikte metin dizesini görüntüler. Veri bağlama olmadan metin görüntülemek için, özellikle öğesinin TextLabel özelliğini başlatmanız veya sınıf oluşturucusundan olay işleyicisini çağırarak olayın tetiklendiğini ValueChanged simüle etmeniz gerekir.

Önlem

özelliğinin Minimum değeri her zaman özelliğin değerinden Maximum küçük olmalıdır. Aşağıdaki örnek, bir özel durum oluşturmasına Slider neden olur:

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

C# derleyicisi, bu iki özelliği sırayla ayarlayan bir kod oluşturur ve Minimum özellik 10 olarak ayarlandığında varsayılan Maximum değer olan 1'den büyüktür. Önce özelliğini ayarlayarak bu durumda özel durumdan Maximum kaçınabilirsiniz:

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

Bu örnekte, varsayılan Minimum değer olan 0'dan büyük olduğundan 20 olarak ayarlanması Maximum sorun oluşturmaz. Minimum Ayarlandığında, değer 20 değerinden Maximum küçüktür.

Aynı sorun XAML'de de var. Özelliklerin her zaman değerinden Minimumbüyük olmasını sağlayacak Maximum şekilde ayarlanması gerekir:

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

ve Maximum değerlerini negatif sayılara ayarlayabilirsinizMinimum, ancak yalnızca her zaman değerinden Maximumküçük olan Minimum bir sırada ayarlayabilirsiniz:

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

Value özelliği her zaman değerinden büyük veya buna eşit ve değerinden Minimum küçük veya eşittirMaximum. Bu aralığın dışındaki bir değere ayarlanırsa Value , değer aralığın içinde kalacak şekilde zorlamalı olur, ancak özel durum tetiklenmez. Örneğin, aşağıdaki örnek bir özel durum oluşturmaz:

Slider slider = new Slider
{
    Value = 10
};

Bunun yerine, Value özelliği 1 değerine zorlamalı Maximum .

Önceki bir örnek 20 ve Minimum 10 olarak ayarlanmışMaximum:

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

Minimum 10 olarak ayarlandığında, Value 10 olarak da ayarlanır.

Özelliğin varsayılan değeri 0 dışında bir şeye zorlandığı sırada Value bir ValueChanged olay işleyicisi eklenmişse, bir ValueChanged olay tetiklenir:

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

Minimum 10 olarak ayarlandığında da Value 10 olarak ayarlanır ve ValueChanged olay oluşturulur. Bu durum, sayfanın geri kalanı oluşturulmadan önce oluşabilir ve işleyici, sayfada henüz oluşturulmamış diğer öğelere başvurmaya çalışabilir. İşleyiciye ValueChanged sayfadaki diğer öğelerin değerlerini denetleen null bazı kodlar eklemek isteyebilirsiniz. Veya değerler başlatıldıktan sonra olay işleyicisini Slider ayarlayabilirsinizValueChanged.