EffectBehavior riusabili
I comportamenti sono un approccio utile per l'aggiunta di un effetto a un controllo e la rimozione del codice boilerplate di gestione degli effetti dai file code-behind. Questo articolo illustra la creazione e l'utilizzo di un Xamarin.Forms comportamento per aggiungere un effetto a un controllo .
Panoramica
La EffectBehavior
classe è un comportamento personalizzato riutilizzabile Xamarin.Forms che aggiunge un'istanza Effect
a un controllo quando il comportamento viene collegato al controllo e rimuove l'istanza Effect
quando il comportamento viene scollegato dal controllo.
Per usare il comportamento, è necessario impostare le proprietà del comportamento seguenti:
- Group - Valore dell'attributo
ResolutionGroupName
per la classe dell'effetto. - Name - Valore dell'attributo
ExportEffect
per la classe dell'effetto.
Per altre informazioni sugli effetti, vedere Effetti.
Nota
EffectBehavior
è una classe personalizzata che può trovarsi nell'esempio e non fa parte di Xamarin.Forms.
Creazione del comportamento
La classe EffectBehavior
deriva dalla classe Behavior<T>
, dove T
è un elemento View
. Ciò significa che la EffectBehavior
classe può essere associata a qualsiasi Xamarin.Forms controllo.
Implementazione di proprietà associabili
La classe EffectBehavior
definisce due istanze di BindableProperty
, che vengono usate per aggiungere un Effect
a un controllo quando il comportamento è associato al controllo. Queste proprietà sono visualizzate nell'esempio di codice seguente:
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); }
}
...
}
Quando si utilizza EffectBehavior
, la proprietà Group
deve essere impostata sul valore dell'attributo ResolutionGroupName
per l'effetto. Inoltre, la proprietà Name
deve essere impostata sul valore dell'attributo ExportEffect
per la classe dell'effetto.
Implementazione degli override
La classe EffectBehavior
esegue l'override dei metodi OnAttachedTo
e OnDetachingFrom
della classe Behavior<T>
, come illustrato nell'esempio di codice seguente:
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);
}
...
}
Il metodo OnAttachedTo
esegue la configurazione chiamando il metodo AddEffect
, passando il controllo associato come parametro. Il metodo OnDetachingFrom
esegue la pulizia chiamando il metodo RemoveEffect
, passando il controllo associato come parametro.
Implementazione della funzionalità del comportamento
Lo scopo del comportamento è aggiungere l'Effect
definito nelle proprietà Group
e Name
a un controllo quando il comportamento viene associato al controllo e rimuovere Effect
quando è il comportamento viene scollegato dal controllo. La funzionalità del comportamento principale è illustrata nell'esempio di codice seguente:
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;
}
}
Il metodo AddEffect
viene eseguito in risposta all'associazione di EffectBehavior
a un controllo e riceve il controllo associato come parametro. Il metodo aggiunge quindi l'effetto recuperato alla raccolta Effects
del controllo. Il metodo RemoveEffect
viene eseguito in risposta allo scollegamento di EffectBehavior
da un controllo e riceve il controllo associato come parametro. Il metodo rimuove quindi l'effetto dalla raccolta Effects
del controllo.
Il metodo GetEffect
usa il metodo Effect.Resolve
per recuperare l'Effect
. L'effetto viene individuato tramite una concatenazione dei valori delle proprietà Group
e Name
. Se una piattaforma non fornisce l'effetto, il metodo Effect.Resolve
restituirà un valore non null
.
Utilizzo del comportamento
La classe EffectBehavior
può essere associata alla raccolta Behaviors
di un controllo, come illustrato nell'esempio di codice XAML seguente:
<Label Text="Label Shadow Effect" ...>
<Label.Behaviors>
<local:EffectBehavior Group="Xamarin" Name="LabelShadowEffect" />
</Label.Behaviors>
</Label>
Il codice C# equivalente è visualizzato nell'esempio seguente:
var label = new Label {
Text = "Label Shadow Effect",
...
};
label.Behaviors.Add (new EffectBehavior {
Group = "Xamarin",
Name = "LabelShadowEffect"
});
Le proprietà Group
e Name
del comportamento vengono impostate sui valori degli attributi ResolutionGroupName
e ExportEffect
della classe dell'effetto in ogni progetto specifico della piattaforma.
In fase di esecuzione, quando il comportamento è associato al controllo Label
, Xamarin.LabelShadowEffect
verrà aggiunto alla raccolta Effects
del controllo. Il risultato è l'aggiunta di un'ombreggiatura al testo visualizzato dal controllo Label
, come illustrato negli screenshot seguenti:
Il vantaggio dell'uso di questo comportamento per aggiungere e rimuovere effetti per i controlli è che il codice boilerplate di gestione degli effetti può essere rimosso dai file code-behind.
Riepilogo
In questo articolo è stato illustrato l'uso di un comportamento per aggiungere un effetto a un controllo. La EffectBehavior
classe è un comportamento personalizzato riutilizzabile Xamarin.Forms che aggiunge un'istanza Effect
a un controllo quando il comportamento viene collegato al controllo e rimuove l'istanza Effect
quando il comportamento viene scollegato dal controllo.