Udostępnij za pośrednictwem


Tworzenie Xamarin.Forms zachowań

Xamarin.Forms Zachowania są tworzone przez wyprowadzanie z klasy Zachowanie lub Zachowanie<T> . W tym artykule przedstawiono sposób tworzenia i korzystania z Xamarin.Forms zachowań.

Omówienie

Proces tworzenia Xamarin.Forms zachowania jest następujący:

  1. Utwórz klasę dziedziczą po Behavior klasie or Behavior<T> , gdzie T jest typem kontrolki, do której należy zastosować zachowanie.
  2. Zastąpij metodę , aby wykonać dowolną wymaganą OnAttachedTo konfigurację.
  3. Zastąpij metodę w celu wykonania dowolnego wymaganego OnDetachingFrom czyszczenia.
  4. Zaimplementuj podstawowe funkcje zachowania.

Spowoduje to wyświetlenie struktury pokazanej w poniższym przykładzie kodu:

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 jest uruchamiana natychmiast po dołączeniu zachowania do kontrolki. Ta metoda odbiera odwołanie do kontrolki, do której jest dołączona, i może służyć do rejestrowania programów obsługi zdarzeń lub wykonywania innej konfiguracji wymaganej do obsługi funkcji zachowania. Możesz na przykład zasubskrybować zdarzenie w kontrolce. Funkcjonalność zachowania zostanie następnie zaimplementowana w procedurze obsługi zdarzeń dla zdarzenia.

Metoda OnDetachingFrom jest uruchamiana po usunięciu zachowania z kontrolki. Ta metoda odbiera odwołanie do kontrolki, do której jest dołączona, i jest używana do wykonania dowolnego wymaganego czyszczenia. Możesz na przykład anulować subskrypcję zdarzenia w kontrolce, aby zapobiec wyciekom pamięci.

Zachowanie można następnie użyć, dołączając je do Behaviors kolekcji odpowiedniej kontrolki.

Tworzenie Xamarin.Forms zachowania

Przykładowa aplikacja demonstruje NumericValidationBehaviorelement , który wyróżnia wartość wprowadzoną przez użytkownika w kontrolce Entry na czerwono, jeśli nie jest to double. Zachowanie zostało pokazane w poniższym przykładzie kodu:

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

Element NumericValidationBehavior pochodzi z Behavior<T> klasy , gdzie T jest .Entry Metoda OnAttachedTo rejestruje program obsługi zdarzeń dla TextChanged zdarzenia, przy OnDetachingFrom użyciu metody anulowania rejestrowania TextChanged zdarzenia, aby zapobiec wyciekom pamięci. Podstawowa funkcjonalność zachowania jest zapewniana przez OnEntryTextChanged metodę , która analizuje wartość wprowadzoną przez użytkownika w Entryobiekcie i ustawia TextColor właściwość na czerwoną, jeśli wartość nie jest wartością double.

Uwaga

Xamarin.Forms nie ustawia BindingContext zachowania, ponieważ zachowania mogą być współużytkowane i stosowane do wielu kontrolek za pomocą stylów.

Korzystanie z Xamarin.Forms zachowania

Każda Xamarin.Forms kontrolka Behaviors ma kolekcję, do której można dodać co najmniej jedno zachowanie, jak pokazano w poniższym przykładzie kodu XAML:

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

Odpowiednik Entry w języku C# jest pokazany w poniższym przykładzie kodu:

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

W czasie wykonywania zachowanie będzie reagować na interakcję z kontrolką zgodnie z implementacją zachowania. Na poniższych zrzutach ekranu przedstawiono zachowanie odpowiadające na nieprawidłowe dane wejściowe:

Przykładowa aplikacja z zachowaniem Xamarin.Forms

Uwaga

Zachowania są zapisywane dla określonego typu kontrolki (lub superklasy, która może być stosowana do wielu kontrolek) i powinny być dodawane tylko do zgodnej kontrolki. Próba dołączenia zachowania do niezgodnej kontrolki spowoduje zgłoszenie wyjątku.

Korzystanie z Xamarin.Forms zachowania przy użyciu stylu

Zachowania mogą być również używane przez jawny lub niejawny styl. Jednak utworzenie stylu, który ustawia Behaviors właściwość kontrolki, nie jest możliwe, ponieważ właściwość jest tylko do odczytu. Rozwiązaniem jest dodanie dołączonej właściwości do klasy zachowania, która kontroluje dodawanie i usuwanie zachowania. Przebieg procesu:

  1. Dodaj dołączoną właściwość do klasy zachowania, która będzie używana do kontrolowania dodawania lub usuwania zachowania do kontrolki, do której będzie dołączone zachowanie. Upewnij się, że dołączona właściwość rejestruje propertyChanged delegata, który zostanie wykonany po zmianie wartości właściwości.
  2. Utwórz element pobierający static i ustawiany dla dołączonej właściwości.
  3. Zaimplementuj logikę w delegatzie, propertyChanged aby dodać i usunąć zachowanie.

Poniższy przykład kodu przedstawia dołączoną właściwość, która kontroluje dodawanie i usuwanie elementu 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);
            }
        }
    }
    ...
}

Klasa NumericValidationBehavior zawiera dołączoną właściwość o nazwie AttachBehavior getter static i setter, która kontroluje dodanie lub usunięcie zachowania do kontrolki, do której zostanie dołączony. Ta dołączona właściwość rejestruje metodę OnAttachBehaviorChanged , która zostanie wykonana po zmianie wartości właściwości. Ta metoda dodaje lub usuwa zachowanie kontrolki na podstawie wartości dołączonej AttachBehavior właściwości.

Poniższy przykład kodu przedstawia jawny styl dla NumericValidationBehavior elementu, który używa dołączonej AttachBehavior właściwości i który można zastosować do Entry kontrolek:

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

Można Style go zastosować do Entry kontrolki, ustawiając jej Style właściwość na Style wystąpienie przy użyciu StaticResource rozszerzenia znaczników, jak pokazano w poniższym przykładzie kodu:

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

Aby uzyskać więcej informacji na temat stylów, zobacz Style.

Uwaga

Chociaż można dodać właściwości możliwe do powiązania z zachowaniem ustawionym lub zapytanym w języku XAML, jeśli utworzysz zachowania, które mają stan, nie powinny być współużytkowane między kontrolkami w obiekcie w Style obiekcie ResourceDictionary.

Usuwanie zachowania z kontrolki

Metoda OnDetachingFrom jest uruchamiana po usunięciu zachowania z kontrolki i służy do wykonania dowolnego wymaganego czyszczenia, takiego jak anulowanie subskrypcji zdarzenia, aby zapobiec wyciekowi pamięci. Jednak zachowania nie są niejawnie usuwane z kontrolek, chyba że kolekcja kontrolki Behaviors zostanie zmodyfikowana przez metodę Remove lub Clear . W poniższym przykładzie kodu pokazano usunięcie określonego zachowania z kolekcji kontrolki Behaviors :

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

Możesz też wyczyścić kolekcję kontrolki Behaviors , jak pokazano w poniższym przykładzie kodu:

entry.Behaviors.Clear();

Ponadto należy pamiętać, że zachowania nie są niejawnie usuwane z kontrolek, gdy strony są zwinięte ze stosu nawigacji. Zamiast tego należy je jawnie usunąć przed wyjściem stron z zakresu.

Podsumowanie

W tym artykule pokazano, jak tworzyć zachowania i korzystać z Xamarin.Forms nich. Xamarin.Forms zachowania są tworzone przez wyprowadzanie z Behavior klasy or Behavior<T> .