Sdílet prostřednictvím


Vytváření Xamarin.Forms chování

Xamarin.Forms chování jsou vytvořeny odvozením z Chování nebo Chování<T> třídy. Tento článek ukazuje, jak vytvářet a využívat Xamarin.Forms chování.

Přehled

Proces vytvoření Xamarin.Forms chování je následující:

  1. Vytvořte třídu, která dědí z Behavior třídy, Behavior<T> kde T je typ ovládacího prvku, na který se má chování použít.
  2. Přepište metodu OnAttachedTo pro provedení požadované instalace.
  3. Přepište metodu pro provedení požadovaného OnDetachingFrom vyčištění.
  4. Implementujte základní funkce chování.

Výsledkem je struktura zobrazená v následujícím příkladu kódu:

public class CustomBehavior : Behavior<View>
{
    protected override void OnAttachedTo (View bindable)
    {
        base.OnAttachedTo (bindable);
        // Perform setup
    }

    protected override void OnDetachingFrom (View bindable)
    {
        base.OnDetachingFrom (bindable);
        // Perform clean up
    }

    // Behavior implementation
}

Metoda OnAttachedTo se aktivuje okamžitě po připojení chování k ovládacímu prvku. Tato metoda obdrží odkaz na ovládací prvek, ke kterému je připojen, a lze jej použít k registraci obslužných rutin událostí nebo k provedení jiného nastavení, které je nutné pro podporu funkce chování. Můžete se například přihlásit k odběru události v ovládacím prvku. Funkce chování by se pak implementovala v obslužné rutině události události.

Metoda OnDetachingFrom se aktivuje při odebrání chování z ovládacího prvku. Tato metoda obdrží odkaz na ovládací prvek, ke kterému je připojen, a slouží k provedení požadovaného vyčištění. Můžete například odhlásit odběr události na ovládacím prvku, abyste zabránili nevracení paměti.

Chování pak může být využito tak, že ho připojíte ke Behaviors kolekci příslušného ovládacího prvku.

Xamarin.Forms Vytvoření chování

Ukázková aplikace ukazuje NumericValidationBehavior, který zvýrazní hodnotu zadaná uživatelem Entry do ovládacího prvku červeně, pokud není double. Chování je znázorněno v následujícím příkladu kódu:

public class NumericValidationBehavior : Behavior<Entry>
{
    protected override void OnAttachedTo(Entry entry)
    {
        entry.TextChanged += OnEntryTextChanged;
        base.OnAttachedTo(entry);
    }

    protected override void OnDetachingFrom(Entry entry)
    {
        entry.TextChanged -= OnEntryTextChanged;
        base.OnDetachingFrom(entry);
    }

    void OnEntryTextChanged(object sender, TextChangedEventArgs args)
    {
        double result;
        bool isValid = double.TryParse (args.NewTextValue, out result);
        ((Entry)sender).TextColor = isValid ? Color.Default : Color.Red;
    }
}

Odvozuje NumericValidationBehavior se od Behavior<T> třídy, kde T je .Entry Metoda OnAttachedTo zaregistruje obslužnou rutinu TextChanged události pro událost s metodou OnDetachingFrom zrušení TextChanged registrace události, aby se zabránilo nevracení paměti. Základní funkce chování je poskytována OnEntryTextChanged metodou, která parsuje hodnotu zadanou uživatelem do Entrya nastaví TextColor vlastnost na červenou, pokud hodnota není double.

Poznámka:

Xamarin.Forms nenastavuje BindingContext chování, protože chování lze sdílet a použít u více ovládacích prvků prostřednictvím stylů.

Xamarin.Forms Využívání chování

Každý Xamarin.Forms ovládací prvek má kolekci Behaviors , do které lze přidat jedno nebo více chování, jak je znázorněno v následujícím příkladu kódu XAML:

<Entry Placeholder="Enter a System.Double">
    <Entry.Behaviors>
        <local:NumericValidationBehavior />
    </Entry.Behaviors>
</Entry>

Ekvivalent Entry v jazyce C# je znázorněn v následujícím příkladu kódu:

var entry = new Entry { Placeholder = "Enter a System.Double" };
entry.Behaviors.Add (new NumericValidationBehavior ());

Za běhu bude chování reagovat na interakci s ovládacím prvku podle implementace chování. Následující snímky obrazovky ukazují chování reagující na neplatný vstup:

Ukázková aplikace s chováním Xamarin.Forms

Poznámka:

Chování se zapisuje pro konkrétní typ ovládacího prvku (nebo pro nadtřídu, která se může použít u mnoha ovládacích prvků) a měly by být přidány pouze do kompatibilního ovládacího prvku. Při pokusu o připojení chování k nekompatibilnímu ovládacímu prvku dojde k vyvolání výjimky.

Xamarin.Forms Využívání chování pomocí stylu

Chování lze také využívat explicitním nebo implicitním stylem. Vytvoření stylu, který nastaví Behaviors vlastnost ovládacího prvku, však není možné, protože vlastnost je jen pro čtení. Řešením je přidat připojenou vlastnost do třídy chování, která řídí přidávání a odebírání chování. Proces je následující:

  1. Přidejte připojenou vlastnost do třídy chování, která bude použita k řízení přidání nebo odebrání chování do ovládacího prvku, ke kterému bude chování připojeno. Zajistěte, aby připojená vlastnost registrovala delegáta propertyChanged , který se spustí při změně hodnoty vlastnosti.
  2. Vytvořte static getter a setter pro připojenou vlastnost.
  3. Implementujte logiku v delegátu propertyChanged , která chování přidá a odebere.

Následující příklad kódu ukazuje připojenou vlastnost, která řídí přidání a odebrání NumericValidationBehavior:

public class NumericValidationBehavior : Behavior<Entry>
{
    public static readonly BindableProperty AttachBehaviorProperty =
        BindableProperty.CreateAttached ("AttachBehavior", typeof(bool), typeof(NumericValidationBehavior), false, propertyChanged: OnAttachBehaviorChanged);

    public static bool GetAttachBehavior (BindableObject view)
    {
        return (bool)view.GetValue (AttachBehaviorProperty);
    }

    public static void SetAttachBehavior (BindableObject view, bool value)
    {
        view.SetValue (AttachBehaviorProperty, value);
    }

    static void OnAttachBehaviorChanged (BindableObject view, object oldValue, object newValue)
    {
        var entry = view as Entry;
        if (entry == null) {
            return;
        }

        bool attachBehavior = (bool)newValue;
        if (attachBehavior) {
            entry.Behaviors.Add (new NumericValidationBehavior ());
        } else {
            var toRemove = entry.Behaviors.FirstOrDefault (b => b is NumericValidationBehavior);
            if (toRemove != null) {
                entry.Behaviors.Remove (toRemove);
            }
        }
    }
    ...
}

Třída NumericValidationBehavior obsahuje připojenou vlastnost s static názvem AttachBehavior getter a setter, která řídí přidání nebo odebrání chování ovládacího prvku, ke kterému bude připojen. Tato připojená vlastnost registruje metodu OnAttachBehaviorChanged , která se spustí při změně hodnoty vlastnosti. Tato metoda přidá nebo odebere chování ovládacího prvku na základě hodnoty AttachBehavior připojené vlastnosti.

Následující příklad kódu ukazuje explicitní styl proNumericValidationBehavior, který používá připojenou AttachBehavior vlastnost, a který lze použít pro Entry ovládací prvky:

<Style x:Key="NumericValidationStyle" TargetType="Entry">
    <Style.Setters>
        <Setter Property="local:NumericValidationBehavior.AttachBehavior" Value="true" />
    </Style.Setters>
</Style>

Lze Style použít na Entry ovládací prvek nastavením jeho Style vlastnosti na Style instanci pomocí StaticResource rozšíření značek, jak je znázorněno v následujícím příkladu kódu:

<Entry Placeholder="Enter a System.Double" Style="{StaticResource NumericValidationStyle}">

Další informace o stylech naleznete v tématu Styly.

Poznámka:

I když můžete přidat vlastnosti vázání k chování, které je nastaveno nebo dotazováno v XAML, pokud vytvoříte chování, které mají stav, které by neměly být sdíleny mezi ovládacími prvky v objektu Style ResourceDictionary.

Odebrání chování z ovládacího prvku

Metoda OnDetachingFrom se aktivuje při odebrání chování z ovládacího prvku a slouží k provedení požadovaného vyčištění, jako je zrušení odběru události, aby se zabránilo nevrácení paměti. Chování však není implicitně odebráno z ovládacích prvků, pokud kolekce ovládacího prvku Behaviors není upravena nějakou metodou Remove nebo Clear metodou. Následující příklad kódu ukazuje odebrání konkrétního chování z kolekce ovládacího prvku Behaviors :

var toRemove = entry.Behaviors.FirstOrDefault (b => b is NumericValidationBehavior);
if (toRemove != null) {
    entry.Behaviors.Remove (toRemove);
}

Případně můžete kolekci ovládacího prvku Behaviors vymazat, jak je znázorněno v následujícím příkladu kódu:

entry.Behaviors.Clear();

Kromě toho mějte na paměti, že chování se implicitně neodebere z ovládacích prvků, když se stránky přepnou z navigačního zásobníku. Místo toho je nutné je explicitně odebrat před přechodem na stránky mimo rozsah.

Shrnutí

Tento článek ukazuje, jak vytvářet a využívat Xamarin.Forms chování. Xamarin.Forms chování jsou vytvořena odvozením z Behavior nebo Behavior<T> třídy.