Xamarin.Forms Stepper

Stáhnout ukázku Stažení ukázky

Krokovač použijte k výběru číselné hodnoty z rozsahu hodnot.

se Xamarin.FormsStepper skládá ze dvou tlačítek označených znaménky minus a plus. S těmito tlačítky může uživatel manipulovat a postupně tak vybrat double hodnotu z rozsahu hodnot.

Definuje Stepper čtyři vlastnosti typu double :

Všechny tyto vlastnosti jsou zálohovány BindableProperty objekty. Vlastnost Xamarin_Forms _Stepper_Value" data-linktype="absolute-path">má výchozí režim vazby Value Xamarin_Forms Value _BindingMode_TwoWay" data-linktype="absolute-path">, což znamená, že je vhodný jako zdroj vazby v aplikaci, která používá architekturu BindingMode.TwoWay

Upozornění

Interně zajistí, že Stepper Xamarin_Forms Stepper _Stepper_Minimum" data-linktype="absolute-path">je menší než Minimum Xamarin_Forms _Stepper_Maximum" data-linktype="absolute-path">Maximum . Pokud Minimum nebo jsou někdy Maximum nastaveny tak, Minimum aby nebyl menší než , je Maximum vyvolána výjimka. Další informace o nastavení vlastností Minimum a najdete v MaximumMinimum Opatření.

Parametr vyžádá vlastnost Stepper Xamarin_Forms Stepper _Stepper_Value" data-linktype="absolute-path">tak, aby byla mezi Value Xamarin_Forms _Stepper_Minimum" data-linktype="absolute-path">a Minimum Xamarin_Forms Value _Stepper_Maximum" data-linktype="absolutní_cesta">Maximum , včetně. Pokud je Minimum vlastnost nastavená na hodnotu větší než vlastnost , nastaví vlastnost Value na StepperValueMinimum . Podobně, pokud Maximum je nastavena na hodnotu menší než Value , nastaví vlastnost na StepperValueMaximum .

Stepperdefinuje událost, která se aktivuje při změně ValueChanged Xamarin_Forms Stepper _Stepper_Value" data-linktype="absolute-path">, a to buď prostřednictvím manipulace s objektem nebo když aplikace nastaví vlastnost ValueStepperValue přímo. Událost ValueChanged se také aktivoval, když je vlastnost Value vyžádána, jak je popsáno v předchozím odstavci.

Objekt, který doprovází událost, má dvě vlastnosti typu ValueChangedEventArgsValueChanged : Xamarin_Forms doubleValueChangedEventArgs _ValueChangedEventArgs_OldValue" data-linktype="absolute-path">a Xamarin_Forms OldValueValueChanged _ValueChangedEventArgs_NewValue" data-linktype="absolute-path">NewValue . V době, kdy je událost aktivována, je hodnota stejná jako NewValue hodnota Xamarin_Forms NewValue _Stepper_Value" data-linktype="absolute-path">Value vlastnosti objektu Stepper .

Základní krokovací kód a značky

Ukázka StepperDemos obsahuje tři stránky, které jsou funkčně identické, ale implementují se různými způsoby. První stránka používá pouze kód jazyka C#, druhá používá XAML s obslužnou rutinou události v kódu a třetí je schopna se vyhnout obslužné rutině události pomocí datové vazby v souboru XAML.

Vytvoření krokovače v kódu

Stránka kódu základního stepperu v ukázce StepperDemos ukazuje, jak v kódu vytvořit a dva objekty:

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

Objekt se inicializuje tak, aby měl Stepper vlastnost Xamarin_Forms Stepper _Stepper_Maximum" data-linktype="absolute-path">s hodnotou Maximum 360, a vlastnost Xamarin_Forms _Stepper_Increment" data-linktype="absolute-path">s Increment hodnotou 30. Manipulace se změnami vybrané hodnoty přírůstkově mezi Stepper Xamarin_Forms Stepper _Stepper_Minimum" data-linktype="absolute-path">na základě hodnoty MinimumMaximumIncrement vlastnosti. Obslužná rutina objektu používá vlastnost ValueChangedStepper Xamarin_Forms ValueChanged _Stepper_Value" data-linktype="absolute-path">objektu k nastavení vlastnosti Xamarin_Forms _VisualElement_Rotation" data-linktype="absolute-path">první a používá metodu s vlastností argumentů události k nastavení Valuestepper vlastnosti Xamarin_Forms StepperRotationLabelstring.FormatNewValue _Label_Text" data-linktype="absolute-path">TextLabel druhé vlastnosti . Tyto dva přístupy k získání aktuální hodnoty jsou Stepper zaměnitelné.

Následující snímky obrazovky ukazují stránku s kódem základního krokovače:

Základní krokovací kód základního

Druhý příkaz Label zobrazí text "(uninitialized)", dokud se s objektem nemanipuluje, což způsobí, že se Stepper první událost ValueChanged aktivovala.

Vytvoření krokovače v jazyce XAML

Stránka BASIC Stepper XAML je funkčně stejná jako základní krokovací kód, ale implementovaná většinou v XAML:

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

Soubor kódu na pozadí obsahuje obslužnou rutinu ValueChanged události:

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

Obslužná rutina události může také získat , Stepper která událost spouštěná prostřednictvím sender argumentu . Vlastnost Xamarin_Forms _Stepper_Value" data-linktype="absolute-path">obsahuje aktuální Value hodnotu:

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

Pokud byl objektu v souboru XAML přiřazen název s atributem Stepper (například "stepper"), obslužná rutina události by mohla odkazovat x:Name přímo na tento objekt:

double value = stepper.Value;

Datová vazba Stepperu

Stránka Základní krokové vazby ukazuje, jak napsat téměř ekvivalentní aplikaci, která eliminuje Xamarin_Forms _Stepper_Value" data-linktype="absolute-path">obslužnou rutinu události pomocí datové :

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

Vlastnost Xamarin_Forms _VisualElement_Rotation" data-linktype="absolute-path">prvního je svázaná s vlastností RotationLabel Xamarin_Forms Rotation _Stepper_Value" data-linktype="absolute-path">objektu , stejně jako Value vlastnost Xamarin_Forms Stepper _Label_Text" data-linktype="absolute-path">TextLabelStringFormat druhé vlastnosti se specifikací. Stránka Základní krokové vazby funguje trochu jinak než dvě předchozí stránky: Když se stránka zobrazí jako první, druhá zobrazí textový řetězec s hodnotou . To je výhoda používání datových vazeb. Pokud chcete zobrazit text bez datové vazby, muset jste konkrétně inicializovat vlastnost nebo simulovat aktivaci události voláním obslužné rutiny události z TextLabelValueChanged konstruktoru třídy.

Opatření

Hodnota vlastnosti Xamarin_Forms _Stepper_Minimum" data-linktype="absolute-path">musí být vždy menší než hodnota vlastnosti Minimum Xamarin_Forms Minimum _Stepper_Maximum" data-linktype="absolute-path">. Maximum Následující fragment kódu způsobí výjimku Stepper :

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

Kompilátor jazyka C# generuje kód, který tyto dvě vlastnosti postupně nastavuje, a když je vlastnost Xamarin_Forms _Stepper_Minimum" data-linktype="absolute-path">nastavená na 180, je větší než výchozí Minimum hodnota Xamarin_Forms Minimum _Stepper_Maximum" data-linktype="absolutní_cesta">hodnota Maximum 100. Této výjimce se můžete vyhnout tak, že nejprve Maximum nastavíte vlastnost :

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

Nastavení Xamarin_Forms _Stepper_Maximum" data-linktype="absolutní_cesta">na hodnotu 360 není problém, protože je větší než výchozí Maximum Xamarin_Forms Maximum _Stepper_Minimum" data-linktype="absolute-path">Minimum hodnotou 0. Při Minimum nastavení je hodnota menší než hodnota Maximum 360.

Stejný problém existuje i v jazyce XAML. Nastavte vlastnosti v pořadí, které zajistí, že Xamarin_Forms _Stepper_Maximum" data-linktype="absolute-path">je Maximum vždy větší než Minimum :

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

Můžete nastavit Xamarin_Forms _Stepper_Minimum" data-linktype="absolute-path">a Minimum Xamarin_Forms Minimum _Stepper_Maximum" data-linktype="absolute-path">Maximum na MinimumMaximum záporná čísla, ale pouze v pořadí, ve kterém je vždy menší než :

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

Vlastnost Xamarin_Forms _Stepper_Value" data-linktype="absolute-path">je vždy větší nebo rovna hodnotě Value Xamarin_Forms Value _Stepper_Minimum" data-linktype="absolutní_cesta">a menší nebo rovna Minimum hodnotě Xamarin_Forms _Stepper_Maximum" data-linktype="absolutní_cesta">Maximum . Pokud je hodnota nastavená na hodnotu mimo tento rozsah, hodnota se vyžádá, aby leží v rozsahu, ale není Value vyvolána žádná výjimka. Tento kód například nevydá výjimku:

Stepper stepper = new Stepper
{
    Value = 180
};

Místo toho se vlastnost Xamarin_Forms _Stepper_Value" data-linktype="absolute-path">přisoudí k Value hodnotě Xamarin_Forms Value _Stepper_Maximum" data-linktype="absolute-path">Maximum 100.

Tady je výše uvedený fragment kódu:

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

Když Xamarin_Forms _Stepper_Minimum" data-linktype="absolute-path">je nastavená na Minimum 180, pak Xamarin_Forms Minimum _Stepper_Value" data-linktype="absolute-path">je také nastavena na Value 180.

Pokud byla obslužná rutina události připojena v době, kdy je vlastnost ValueChanged Xamarin_Forms ValueChanged _Stepper_Value" data-linktype="absolute-path">vyžádá k jiné než výchozí hodnotě Value 0, je aktivována ValueChanged událost. Tady je fragment kódu XAML:

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

Když Xamarin_Forms _Stepper_Minimum" data-linktype="absolute-path">je nastavená na Minimum 180, Xamarin_Forms Minimum _Stepper_Value" data-linktype="absolute-path">je Value také nastavená na 180 a událost se ValueChanged aktivují. K tomu může dojít před vytvořením zbytku stránky a obslužná rutina se může pokusit odkazovat na jiné prvky na stránce, které ještě nebyly vytvořeny. Do obslužné rutiny můžete přidat kód, který ValueChanged kontroluje hodnoty jiných prvků na null stránce. Nebo můžete nastavit obslužnou ValueChanged rutinu události po Stepper inicializaci hodnot.