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:
- Utwórz klasę dziedziczą po
Behavior
klasie orBehavior<T>
, gdzieT
jest typem kontrolki, do której należy zastosować zachowanie. - Zastąpij metodę , aby wykonać dowolną wymaganą
OnAttachedTo
konfigurację. - Zastąpij metodę w celu wykonania dowolnego wymaganego
OnDetachingFrom
czyszczenia. - 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 NumericValidationBehavior
element , 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 Entry
obiekcie 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:
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:
- 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. - Utwórz element pobierający
static
i ustawiany dla dołączonej właściwości. - 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>
.