Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
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
ResolutionGroupNameper la classe dell'effetto. - Name - Valore dell'attributo
ExportEffectper 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.