Xamarin.Forms Stepper

Örnek indir Örneği indirin

Bir değer aralığından sayısal değer seçmek için bir Stepper kullanın.

, Xamarin.FormsStepper Eksi ve artı işaretleriyle etiketlenmiş iki düğmeden oluşur. Bu düğmeler Kullanıcı tarafından artımlı olarak double bir değer aralığından bir değer seçerek değiştirilebilir.

, Stepper Türünün dört özelliğini tanımlar double :

Bu özelliklerin tümü nesneler tarafından desteklenir BindableProperty . Xamarin_Forms _Stepper_Value "Data-LinkType =" Absolute-path ">Value özelliğinin varsayılan bağlama modu Xamarin_Forms Value _BindingMode_TwoWay" Data-LinkType = "Absolute-path" >, bu da BindingMode.TwoWay mimarisini kullanan bir uygulamada bağlama kaynağı olarak uygun olduğu anlamına gelir.

Uyarı

Dahili olarak, Stepper Xamarin_Forms Stepper _Stepper_Minimum "Data-LinkType =" Absolute-path ">Minimum Xamarin_Forms _Stepper_Maximum" Data-LinkType = "mutlak yol" >değerinden küçük Maximum olmasını sağlar. MinimumVeya MaximumMinimum ' den küçük olmayan bir değer ayarlandıysa Maximum , bir özel durum oluşturulur. Ve özelliklerini ayarlama hakkında daha fazla bilgi için MinimumMaximum bkz. Minimum bölümü.

"Data-LinkType =" Absolute-path " Stepper >özelliğini _Stepper_Value Xamarin_Forms, Xamarin_Forms _Stepper_Minimum" Data-LinkType = StepperValue "absolute-path" >Minimum ve Xamarin_Forms Value _Stepper_Maximum "Data-LinkType =" Absolute-path ">Maximum (dahil) arasında olacak şekilde zorlar. MinimumÖzelliği özelliğinden daha büyük bir değere ayarlandıysa, ValueStepperValue özelliği olarak ayarlar Minimum . Benzer şekilde, değerinden Maximum küçük bir değere ayarlanırsa Value , StepperValue özelliğini olarak ayarlar Maximum .

StepperValueChangedXamarin_Forms Stepper _Stepper_Value "Data-LinkType =" Absolute-path ">değiştiğinde harekete geçirilen bir olay tanımlar, ya da ValueStepper uygulama özelliği doğrudan ayarladığında Kullanıcı düzenlemesi aracılığıyla veya Value . ValueChangedAyrıca, Value özellik önceki paragrafta açıklandığı gibi zorlandığı zaman bir olay da tetiklenir.

ValueChangedEventArgsOlaya eşlik eden nesnenin ValueChanged iki özelliği vardır double : Xamarin_Forms ValueChangedEventArgs _ValueChangedEventArgs_OldValue "Data-LinkType =" Absolute-path ">OldValue ve Xamarin_Forms ValueChanged _ValueChangedEventArgs_NewValue" data-LinkType = "Absolute-path" >NewValue . Olayın tetiklenme sırasında değeri, NewValueNewValue nesnenin "Data-LinkType =" Absolute-path ">özelliği ile aynı _Stepper_Value Xamarin_Forms ValueStepper .

Temel Stepper kodu ve biçimlendirmesi

Stepperdemoları örneği, işlevsel olarak özdeş olan ancak farklı yollarla uygulanan üç sayfa içerir. İlk sayfa yalnızca C# kodunu kullanır, ikincisi ise kodda bir olay işleyicisiyle XAML kullanır ve üçüncü olarak XAML dosyasındaki veri bağlamayı kullanarak olay işleyicisinden kaçınabilirsiniz.

Kodda Stepper oluşturma

Stepperdemoları örneğindeki Basic Stepper Code sayfası, kodda nasıl ve iki nesnenin nasıl oluşturulacağını gösterir :

public class BasicStepperCodePage : ContentPage
{
    public BasicStepperCodePage()
    {
        Label rotationLabel = new Label
        {
            Text = "ROTATING TEXT",
            FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)),
            HorizontalOptions = LayoutOptions.Center,
            VerticalOptions = LayoutOptions.CenterAndExpand
        };

        Label displayLabel = new Label
        {
            Text = "(uninitialized)",
            HorizontalOptions = LayoutOptions.Center,
            VerticalOptions = LayoutOptions.CenterAndExpand
        };

        Stepper stepper = new Stepper
        {
            Maximum = 360,
            Increment = 30,
            HorizontalOptions = LayoutOptions.Center
        };
        stepper.ValueChanged += (sender, e) =>
        {
            rotationLabel.Rotation = stepper.Value;
            displayLabel.Text = string.Format("The Stepper value is {0}", e.NewValue);
        };

        Title = "Basic Stepper Code";
        Content = new StackLayout
        {
            Margin = new Thickness(20),
            Children = { rotationLabel, stepper, displayLabel }
        };
    }
}

, Stepper Bir Xamarin_Forms Stepper _Stepper_Maximum "Data-LinkType =" Absolute-path ">Maximum özelliği 360 ve bir Xamarin_Forms _Stepper_Increment" Data-linktype = "Absolute-path" >Increment özelliği olan 30 ' a sahip olacak şekilde başlatılır. StepperSeçili değeri, Xamarin_Forms Stepper _Stepper_Minimum "Data-LinkType =" Absolute-path ">MinimumMaximum özelliğin değerine göre Increment ) artımlı olarak değiştirme. İşleyicisi, Xamarin_Forms _Stepper_Value "Data-LinkType =" Absolute-path ">özelliğini kullanır ve bu Xamarin_Forms nesnenin _VisualElement_Rotation" Data-LinkType = "Absolute-path" >özelliğini ayarlamak için ValueChangedStepperValueChangedValuestepperStepperRotationLabelstring.Format yönteminin NewValue olay bağımsız değişkenlerinin özelliği ile birlikte kullanır. bu, ikinci bir "Data-LinkType =" Absolute-path "Xamarin_Forms Text özelliğine sahiptir Label . Geçerli değerini elde etmek için bu iki yaklaşım birbirinin yerine Stepper kullanılır.

Aşağıdaki ekran görüntülerinde temel Stepper kod sayfası gösterilmektedir:

Temel Stepper Code

İkincisi, Label "(başlatılmamış)" metnini değiştirilene kadar görüntüler ve Stepper Bu, ilk olayın başlatılmasına neden olur ValueChanged .

XAML 'de Stepper oluşturma

Temel STEPPER xaml sayfası, temel Stepper kodla aynı ancak xaml 'de genellikle uygulanmış olan bir işlev gibidir:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="StepperDemo.BasicStepperXAMLPage"
             Title="Basic Stepper XAML">
    <StackLayout Margin="20">
        <Label x:Name="_rotatingLabel"
               Text="ROTATING TEXT"
               FontSize="Large"
               HorizontalOptions="Center"
               VerticalOptions="CenterAndExpand" />
        <Stepper Maximum="360"
                 Increment="30"
                 HorizontalOptions="Center"
                 ValueChanged="OnStepperValueChanged" />
        <Label x:Name="_displayLabel"
               Text="(uninitialized)"
               HorizontalOptions="Center"
               VerticalOptions="CenterAndExpand" />        
    </StackLayout>
</ContentPage>

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

public partial class BasicStepperXAMLPage : ContentPage
{
    public BasicStepperXAMLPage()
    {
        InitializeComponent();
    }

    void OnStepperValueChanged(object sender, ValueChangedEventArgs e)
    {
        double value = e.NewValue;
        _rotatingLabel.Rotation = value;
        _displayLabel.Text = string.Format("The Stepper value is {0}", value);
    }
}

Olay işleyicisinin, Stepper olayı bağımsız değişken aracılığıyla oluşturan öğesini alması de mümkündür sender . Xamarin_Forms _Stepper_Value "Data-LinkType =" Absolute-path ">Value özelliği geçerli değeri içerir:

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

StepperNESNESINE xaml dosyasında bir x:Name öznitelik (örneğin, "Stepper") verildiyse, olay işleyicisi doğrudan bu nesneye başvurabilir:

double value = stepper.Value;

Stepper veri bağlama

Temel Stepper bağlamaları sayfası, kullanarak "Data-LinkType =" absolute-path ">olay işleyicisini _Stepper_Value Xamarin_Forms ortadan kaldıran neredeyse denk bir uygulamanın nasıl yazılacağını gösterir:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="StepperDemo.BasicStepperBindingsPage"
             Title="Basic Stepper Bindings">
    <StackLayout Margin="20">
        <Label Text="ROTATING TEXT"
               Rotation="{Binding Source={x:Reference _stepper}, Path=Value}"
               FontSize="Large"
               HorizontalOptions="Center"
               VerticalOptions="CenterAndExpand" />
        <Stepper x:Name="_stepper"
                 Maximum="360"
                 Increment="30"
                 HorizontalOptions="Center" />
        <Label Text="{Binding Source={x:Reference _stepper}, Path=Value, StringFormat='The Stepper value is {0:F0}'}"
               HorizontalOptions="Center"
               VerticalOptions="CenterAndExpand" />
    </StackLayout>
</ContentPage>

Xamarin_Forms _VisualElement_Rotation "Data-LinkType =" Absolute-path ">özelliği, Xamarin_Forms _Stepper_Value" Data-LinkType = "Absolute-path" >özelliği RotationLabelRotationValueStepperTextLabel bir StringFormat belirtile ikinci Xamarin_Forms "Data-LinkType =" Absolute-path "_Label_Text özelliğine sahiptir. Temel Stepper bağlamaları sayfası, önceki iki sayfadan biraz farklı çalışır: sayfa ilk göründüğünde, ikinci değer ile metin dizesini görüntüler. Bu, veri bağlamayı kullanmanın bir avantajıdır. Veri bağlama olmadan metin göstermek için, TextLabelValueChanged sınıf oluşturucusundan olay işleyicisini çağırarak, veya özelliğini özel olarak başlatmak veya bir olayı tetiklemesi benzetimi yapmanız gerekir.

Almanız

"Data-LinkType =" Absolute-path ">özelliğinin _Stepper_Minimum Xamarin_Forms değeri Minimum her zaman Xamarin_Forms Minimum _Stepper_Maximum" Data-LinkType = "Absolute-path" >özelliğinin değerinden küçük olmalıdır Maximum . Aşağıdaki kod parçacığı, ' ın Stepper bir özel durum oluşturmasına neden olur:

// Throws an exception!
Stepper stepper = new Stepper
{
    Minimum = 180,
    Maximum = 360
};

C# derleyicisi, bu iki özelliği sırasıyla ayarlayan kodu oluşturur ve Xamarin_Forms _Stepper_Minimum "Data-LinkType =" Absolute-path ">Minimum özelliği 180 olarak ayarlandığında, varsayılan Xamarin_Forms Minimum _Stepper_Maximum" Data-LinkType = "absolute-path" >Maximum değeri 100 ' den büyüktür. Önce özelliği ayarlayarak bu durumda özel durumdan kaçınabilirsiniz Maximum :

Stepper stepper = new Stepper
{
    Maximum = 360,
    Minimum = 180
};

Xamarin_Forms _Stepper_Maximum "Data-LinkType =" Absolute-path ">Maximum 360 olarak ayarlanması, Maximum " Data-LinkType = "Absolute-path" _Stepper_Minimum Minimum değeri 0 ' Xamarin_Forms dan büyük olduğu için bir sorun değildir. Ayarlandığında Minimum , değer 360 değerinden küçüktür Maximum .

XAML 'de aynı sorun vardır. Özellikleri, "Data-LinkType =" Absolute-path ">Xamarin_Forms _Stepper_Maximum Maximum her zaman büyük olduğundan emin olmak için bir sırada ayarlayın Minimum :

<Stepper Maximum="360"
         Minimum="180" ... />

"Data-LinkType =" Absolute- path ">Minimum ve Xamarin_Forms Minimum _Stepper_Maximum" Data-linktype = "mutlak yol" >Maximum değerlerini negatif sayılara, ancak Minimum her zaman küçüktür olan bir sıraya göre Maximum _Stepper_Minimum Xamarin_Forms ayarlayabilirsiniz:

<Stepper Minimum="-360"
         Maximum="-180" ... />

Xamarin_Forms _Stepper_Value "Data-LinkType =" Absolute-path ">Value özelliği her zaman Xamarin_Forms Value _Stepper_Minimum" Data-LinkType = "Absolute-path" >değerinden büyük veya buna eşit ve Xamarin_Forms _Stepper_Maximum Minimum "Data-LinkType =" Absolute-path ">değerinden küçük veya buna eşit Maximum . ValueBu aralığın dışında bir değere ayarlanırsa, değer aralığın içinde bulunmayacak, ancak hiçbir özel durum oluşturulmaz. Örneğin, bu kod bir özel durum oluşturmaz:

Stepper stepper = new Stepper
{
    Value = 180
};

Bunun yerine, Xamarin_Forms _Stepper_Value "Data-LinkType =" Absolute-path ">Value özelliği Xamarin_Forms Value _Stepper_Maximum" Data-LinkType = "Absolute-path" >Maximum 100 değerine zorlanır.

Aşağıda gösterilen bir kod parçacığı aşağıda verilmiştir:

Stepper stepper = new Stepper
{
    Maximum = 360,
    Minimum = 180
};

Xamarin_Forms _Stepper_Minimum "Data-LinkType =" Absolute-path ">Minimum 180 olarak ayarlandığında, Xamarin_Forms Minimum _Stepper_Value" Data-LinkType = "absolute-path" >Value de 180 olarak ayarlanır.

Bir ValueChanged olay işleyicisi, Xamarin_Forms ValueChanged _Stepper_Value "Data-LinkType =" Absolute-path ">Value özelliği varsayılan değer olan 0 ' dan başka bir değere zorlanmışsa, bir ValueChanged olay tetiklenir. XAML 'in bir kod parçacığı aşağıda verilmiştir:

<Stepper ValueChanged="OnStepperValueChanged"
         Maximum="360"
         Minimum="180" />

Xamarin_Forms _Stepper_Minimum "Data-LinkType =" Absolute-path ">Minimum 180 olarak ayarlandığında, Xamarin_Forms Minimum _Stepper_Value" Data-LinkType = "absolute-path" >Value de 180 olarak ayarlanır ve ValueChanged olay tetiklenir. Bu durum sayfanın geri kalanı oluşturulmadan ve işleyicinin henüz oluşturulmamış sayfadaki diğer öğelere başvurmasına çalışabilir. ValueChangedİşleyicide null sayfadaki diğer öğelerin değerlerini denetleyen bazı kodlar eklemek isteyebilirsiniz. Ya da, ValueChanged değerler başlatıldıktan sonra olay işleyicisini ayarlayabilirsiniz Stepper .