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:
- Gruppe: der Wert des
ResolutionGroupName
-Attributs für die Effekt-Klasse. - Name: der Wert des
ExportEffect
-Attributs für die Effekt-Klasse.
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:
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.