Teilen über


Wiederverwendbare EffectBehavior-Klasse

Verhalten sind ein nützlicher Ansatz, um Effekte zu einem Steuerelement hinzuzufügen. Dadurch wird standardmäßig genutzter Effektbehandlungscode von Codebehind-Dateien verwendet. In diesem Artikel wird das Erstellen und Nutzen eines Xamarin.Forms-Verhaltens veranschaulicht, um einem Steuerelement einen Effekt hinzuzufügen.

Übersicht

Die EffectBehavior-Klasse ist ein wiederverwendbares benutzerdefiniertes Xamarin.Forms-Verhalten, das einem Steuerelement eine Effect-Instanz hinzufügt, wenn das Verhalten an das Steuerelement angefügt wird. Die Effect-Instanz wird entfernt, wenn das Verhalten vom Steuerelement abgetrennt wird.

Die folgenden Verhaltenseigenschaften müssen für die Verwendung des Verhaltens festgelegt werden:

Weitere Informationen zu Effekten finden Sie unter Effekte.

Hinweis

Dies EffectBehavior ist eine benutzerdefinierte Klasse, die sich im Beispiel befindet und nicht Teil des Xamarin.FormsBeispiels ist.

Erstellen des Verhaltens

Die EffectBehavior-Klasse wird von der Behavior<T>-Klasse abgeleitet, bei der T einer View-Klasse entspricht. Dies bedeutet, dass die EffectBehavior-Klasse an jedes beliebige Xamarin.Forms-Steuerelement anfügt werden kann.

Implementieren von bindbaren Eigenschaften

Die EffectBehavior-Klasse definiert zwei BindableProperty-Instanzen, welche verwendet werden, um einem Steuerelement eine Effect-Klasse anzufügen, wenn das Verhalten dem Steuerelement angefügt wird. Diese Eigenschaften werden im folgenden Codebeispiel veranschaulicht:

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); }
  }
  ...
}

Wenn die EffectBehavior-Klasse genutzt wird, sollte die Group-Eigenschaft auf den Wert des ResolutionGroupName-Attributs für den Effekt festgelegt werden. Zudem sollte die Name-Eigenschaft auf den Wert des ExportEffect-Attributs für die Effekt-Klasse festgelegt werden.

Implementieren der Überschreibungen

Die EffectBehavior-Klasse überschreibt, wie im folgenden Codebeispiel zu sehen ist, die Methoden OnAttachedTo und OnDetachingFrom der Behavior<T>-Klasse:

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);
  }
  ...
}

Die OnAttachedTo-Methode führt das Setup aus, indem sie die AddEffect-Methode aufruft, wobei das angefügte Steuerelement als Parameter übergeben wird. Die OnDetachingFrom-Methode führt den Cleanup aus, indem sie die RemoveEffect-Methode aufruft, wobei das angefügte Steuerelement als Parameter übergeben wird.

Implementieren der Verhaltensfunktionalität

Der Zweck des Verhaltens ist es, die Effect-Klasse, die in den Group- und Name-Eigenschaften definiert ist, einem Steuerelement anzufügen, wenn das Verhalten dem Steuerelement angefügt wird, und die Effect-Klasse zu entfernen, wenn das Verhalten vom Steuerelement getrennt wird. Die Kernfunktionalität des Verhaltens wird im folgenden Codebeispiel veranschaulicht:

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;
  }
}

Die AddEffect-Methode wird als Reaktion auf das Anfügen von EffectBehavior an ein Steuerelement ausgeführt und erhält das angefügte Steuerelement als Parameter. Die Methode fügt dann den abgerufenen Effekt der Effects-Sammlung des Steuerelements hinzu. Die RemoveEffect-Methode wird als Reaktion auf das Trennen von EffectBehavior von einem Steuerelement ausgeführt und erhält das angefügte Steuerelement als Parameter. Die Methode entfernt dann den Effekt aus der Effects-Sammlung des Steuerelements.

Die GetEffect-Methode verwendet die Effect.Resolve-Methode, um den Effect-Wert abzurufen. Der Effekt wird durch eine Verkettung der Group- und Name-Eigenschaftswerte gefunden. Wenn eine Plattform den Effekt nicht bereitstellt, gibt die Effect.Resolve-Methode einen Wert ungleich null zurück.

Nutzen des Verhaltens

Die EffectBehavior-Klasse kann, wie im folgenden XAML-Codebeispiel veranschaulicht, der Behaviors-Sammlung eines Steuerelements angefügt werden:

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

Der äquivalente C#-Code ist im folgenden Codebeispiel zu sehen:

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

Die Group- und Name-Eigenschaften des Verhaltens werden für die Effekt-Klasse in jedem plattformspezifischen Projekt auf die Werte der Attribute ResolutionGroupName und ExportEffect festgelegt.

Zur Laufzeit, wenn das Verhalten dem Label-Steuerelement angefügt wird, wird die Xamarin.LabelShadowEffect-Klasse der Effects-Sammlung des Steuerelements hinzugefügt. Dadurch wird wie in den folgenden Screenshots dargestellt ein Schatten zu dem Text hinzugefügt, der vom Label-Steuerelement angezeigt wird:

Beispielanwendung mit EffectsBehavior

Der Vorteil dieses Verhaltens zum Hinzufügen und Entfernen von Effekten bei Steuerelementen besteht darin, dass Sie Standardcode zum Verarbeiten von Effekten aus CodeBehind-Dateien entfernen können.

Zusammenfassung

In diesem Artikel wurde veranschaulicht, wie einem Steuerelement mithilfe eines Verhaltens ein Effekt hinzugefügt werden kann. Die EffectBehavior-Klasse ist ein wiederverwendbares benutzerdefiniertes Xamarin.Forms-Verhalten, das einem Steuerelement eine Effect-Instanz hinzufügt, wenn das Verhalten an das Steuerelement angefügt wird. Die Effect-Instanz wird entfernt, wenn das Verhalten vom Steuerelement abgetrennt wird.