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í:
- Group – hodnota atributu
ResolutionGroupName
pro třídu efektu. - Name – hodnota atributu
ExportEffect
pro třídu efektu.
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:
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.