Sdílet prostřednictvím


Opakovatelně použitelná třída EffectBehavior

Chování je užitečným přístupem k přidání efektu do ovládacího prvku a odebrání kódu pro zpracování kódu ze souborů s často používanými kotlovou deskou. Tento článek ukazuje vytvoření a využívání Xamarin.Forms chování pro přidání efektu do ovládacího prvku.

Přehled

Třída EffectBehavior je opakovaně použitelné Xamarin.Forms vlastní chování, které přidává Effect instanci do ovládacího prvku, když je chování připojeno k ovládacímu prvku, a odebere Effect instanci, když je chování odpojeno od ovládacího prvku.

Aby se toto chování používalo, musí být nastaveny následující vlastnosti chování:

Další informace o efektech naleznete v tématu Efekty.

Poznámka:

Jedná se EffectBehavior o vlastní třídu, která může být umístěna v ukázce a není součástí Xamarin.Forms.

Vytvoření chování

Třída EffectBehavior je odvozena od Behavior<T> třídy, kde T je View. To znamená, že EffectBehavior třídu lze připojit k libovolnému Xamarin.Forms ovládacímu prvku.

Implementace vlastností s možností vytvoření vazby

Třída EffectBehavior definuje dvě BindableProperty instance, které se používají k přidání Effect do ovládacího prvku, když je chování připojeno k ovládacímu prvku. Tyto vlastnosti jsou uvedeny v následujícím příkladu kódu:

public class EffectBehavior : Behavior<View>
{
  public static readonly BindableProperty GroupProperty =
    BindableProperty.Create ("Group", typeof(string), typeof(EffectBehavior), null);
  public static readonly BindableProperty NameProperty =
    BindableProperty.Create ("Name", typeof(string), typeof(EffectBehavior), null);

  public string Group {
    get { return (string)GetValue (GroupProperty); }
    set { SetValue (GroupProperty, value); }
  }

  public string Name {
    get { return(string)GetValue (NameProperty); }
    set { SetValue (NameProperty, value); }
  }
  ...
}

EffectBehavior Při použití Group je vlastnost by měla být nastavena na hodnotu ResolutionGroupName atributu efektu. Kromě toho Name by vlastnost měla být nastavena na hodnotu ExportEffect atributu pro třídu efektu.

Implementace přepsání

Třída EffectBehavior přepíše OnAttachedTo a OnDetachingFrom metody Behavior<T> třídy, jak je znázorněno v následujícím příkladu kódu:

public class EffectBehavior : Behavior<View>
{
  ...
  protected override void OnAttachedTo (BindableObject bindable)
  {
    base.OnAttachedTo (bindable);
    AddEffect (bindable as View);
  }

  protected override void OnDetachingFrom (BindableObject bindable)
  {
    RemoveEffect (bindable as View);
    base.OnDetachingFrom (bindable);
  }
  ...
}

Metoda OnAttachedTo provádí nastavení voláním AddEffect metody a předáním připojeného ovládacího prvku jako parametru. Metoda OnDetachingFrom provádí vyčištění voláním RemoveEffect metody a předáním připojeného ovládacího prvku jako parametru.

Implementace funkce chování

Účelem chování je přidat Effect definované v ovládacím Group prvku a Name vlastnosti do ovládacího prvku, když je toto chování připojeno k ovládacímu prvku, a odebrat Effect , kdy je chování odpojeno od ovládacího prvku. Základní funkce chování je znázorněna v následujícím příkladu kódu:

public class EffectBehavior : Behavior<View>
{
  ...
  void AddEffect (View view)
  {
    var effect = GetEffect ();
    if (effect != null) {
      view.Effects.Add (GetEffect ());
    }
  }

  void RemoveEffect (View view)
  {
    var effect = GetEffect ();
    if (effect != null) {
      view.Effects.Remove (GetEffect ());
    }
  }

  Effect GetEffect ()
  {
    if (!string.IsNullOrWhiteSpace (Group) && !string.IsNullOrWhiteSpace (Name)) {
      return Effect.Resolve (string.Format ("{0}.{1}", Group, Name));
    }
    return null;
  }
}

Metoda AddEffect se spustí v reakci na EffectBehavior připojení k ovládacímu prvku a obdrží připojený ovládací prvek jako parametr. Metoda pak přidá načtený efekt do kolekce ovládacího prvku Effects . Metoda RemoveEffect se spustí v reakci na EffectBehavior odpojení od ovládacího prvku a obdrží připojený ovládací prvek jako parametr. Metoda pak odebere efekt z kolekce ovládacího prvku Effects .

Metoda GetEffect používá metodu Effect.Resolve k načtení Effect. Efekt se nachází prostřednictvím zřetězení Group hodnot a Name vlastností. Pokud platforma efekt neposkytuje, Effect.Resolve vrátí metoda nehodnocenínull .

Využívání chování

Třídu EffectBehavior lze připojit k Behaviors kolekci ovládacího prvku, jak je znázorněno v následujícím příkladu kódu XAML:

<Label Text="Label Shadow Effect" ...>
  <Label.Behaviors>
    <local:EffectBehavior Group="Xamarin" Name="LabelShadowEffect" />
  </Label.Behaviors>
</Label>

Ekvivalentní kód jazyka C# je znázorněn v následujícím příkladu kódu:

var label = new Label {
  Text = "Label Shadow Effect",
  ...
};
label.Behaviors.Add (new EffectBehavior {
  Group = "Xamarin",
  Name = "LabelShadowEffect"
});

Vlastnosti Group Name chování jsou nastaveny na hodnoty ResolutionGroupName a ExportEffect atributy pro třídu efektu v každém projektu specifickém pro platformu.

Pokud je chování připojené k ovládacímu Label prvku za běhu, Xamarin.LabelShadowEffect přidá se do kolekce ovládacího prvku Effects . Výsledkem je přidání stínu do textu zobrazeného ovládacím Label prvku, jak je znázorněno na následujících snímcích obrazovky:

Ukázková aplikace s effectsBehavior

Výhodou tohoto chování při přidávání a odebírání efektů z ovládacích prvků je, že kód pro zpracování efektu kotle lze odebrat ze souborů kódu za kódem.

Shrnutí

Tento článek demonstroval použití chování k přidání efektu do ovládacího prvku. Třída EffectBehavior je opakovaně použitelné Xamarin.Forms vlastní chování, které přidává Effect instanci do ovládacího prvku, když je chování připojeno k ovládacímu prvku, a odebere Effect instanci, když je chování odpojeno od ovládacího prvku.