Condividi tramite


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:

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:

Applicazione di esempio con EffectsBehavior

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.