Angefügte Eigenschaften
Angefügte Eigenschaften ermöglichen es einem Objekt, einen Wert für eine Eigenschaft zuzuweisen, die von der eigenen Klasse nicht definiert wird. Beispielsweise können untergeordnete Elemente angefügte Eigenschaften verwenden, um ihr übergeordnetes Element darüber zu informieren, wie sie auf der Benutzeroberfläche dargestellt werden sollen. Mit Grid
dem Steuerelement kann die Zeile und Spalte eines untergeordneten Elements durch Festlegen der Grid.Row
und Grid.Column
angefügten Eigenschaften angegeben werden. Grid.Row
und Grid.Column
sind angefügte Eigenschaften, da sie für Elemente festgelegt sind, die untergeordnete Elemente eines Grid
sind, statt auf Grid
selbst.
Bindungsfähige Eigenschaften sollten in den folgenden Szenarien als angefügte Eigenschaften implementiert werden:
- Wenn ein Mechanismus zum Einstellen von Eigenschaften auch für andere Klassen als die definierende Klasse verfügbar sein soll.
- Wenn die Klasse einen Dienst darstellt, der einfach in andere Klassen integriert werden muss.
Weitere Informationen zu bindbaren Eigenschaften finden Sie unter "Bindable Properties".
Erstellen einer angefügten Eigenschaft
Der Prozess zum Erstellen einer angefügten Eigenschaft lautet wie folgt:
- Erstellen Sie eine
BindableProperty
Instanz mit einer derCreateAttached
Methodenüberladungen. - Stellen Sie
static
Get
PropertyName- undSet
PropertyName-Methoden als Zugriffsmethoden für die angefügte Eigenschaft bereit.
Erstellen einer Eigenschaft
Beim Erstellen einer angehängten Eigenschaft zur Verwendung bei anderen Typen muss die Klasse, in der die Eigenschaft erstellt wird, nicht von BindableObject
abgeleitet werden. Allerdings sollte die Ziel Eigenschaft für Zugriffe von oder abgeleitet von BindableObject
sein.
Eine angefügte Eigenschaft kann durch Deklarieren einer public static readonly
Eigenschaft vom Typ BindableProperty
erstellt werden. Die bindungsfähige Eigenschaft sollte auf den zurückgegebenen Wert einer der BindableProperty.CreateAttached
Methodenüberladungen festgelegt werden. Die Deklaration sollte sich im Körper der Eignerklasse, aber außerhalb von Memberdefinitionen befinden.
Wichtig
Die Namenskonvention für angehängte Eigenschaften ist, dass der Bezeichner der angehängten Eigenschaft mit dem in der CreateAttached
Methode angegebenen Eigenschaftsnamen übereinstimmen muss, wobei " Eigenschaft" angehängt wird.
Der folgende Code zeigt ein Beispiel einer angefügten Eigenschaft:
public static readonly BindableProperty HasShadowProperty =
BindableProperty.CreateAttached ("HasShadow", typeof(bool), typeof(ShadowEffect), false);
Dadurch wird eine angefügte Eigenschaft mit dem Namen HasShadowProperty
, vom Typ bool
. Die Eigenschaft gehört der ShadowEffect
Klasse und hat einen Standardwert von false
.
Weitere Informationen zum Erstellen von bindungsfähigen Eigenschaften, einschließlich Parametern, die während der Erstellung angegeben werden können, finden Sie unter Erstellen einer bindungsfähigen Eigenschaft.
Erstellen von Zugriffsmethoden
Statische Get
PropertyName- und Set
,PropertyName Methoden sind als Zugriffsmethoden für die angefügte Eigenschaft erforderlich. Andernfalls kann das Eigenschaftensystem die angefügte Eigenschaft nicht verwenden. Die Get
PropertyName Zugriffsmethode sollte der folgenden Signatur entsprechen:
public static valueType GetPropertyName(BindableObject target)
Die Get
PropertyName Zugriffsmethode sollte den Wert zurückgeben, der im entsprechenden BindableProperty
Feld für die angefügte Eigenschaft enthalten ist. Dies kann erreicht werden, indem man die Methode GetValue
aufruft, den Bezeichner der bindbaren Eigenschaft übergibt, für die der Wert ermittelt werden soll, und dann den sich ergebenden Wert auf den erforderlichen Typ umsetzt.
Die Set
PropertyName Zugriffsmethode sollte der folgenden Signatur entsprechen:
public static void SetPropertyName(BindableObject target, valueType value)
Die Set
PropertyName Zugriffsmethode sollte den Wert des entsprechenden BindableProperty
Felds für die angefügte Eigenschaft festlegen. Dies kann erreicht werden, indem die SetValue
Methode aufgerufen und der Bezeichner für bindungsfähige Eigenschaften, für den der Wert abgerufen werden soll, und der abzurufende Wert übergeben werden.
Für beide Zugriffsmethoden sollte das Ziel objekt aus BindableObject
bestehen oder davon abgeleitet sein.
Im folgenden Cocebeispiel wird der Zugriff auf die HasShadow
Eigenschaft veranschaulicht:
public static bool GetHasShadow (BindableObject view)
{
return (bool)view.GetValue (HasShadowProperty);
}
public static void SetHasShadow (BindableObject view, bool value)
{
view.SetValue (HasShadowProperty, value);
}
Verbrauchen einer angefügten Eigenschaft
Nachdem eine angefügte Eigenschaft erstellt wurde, kann sie aus XAML oder Code verwendet werden. In XAML wird dies durch die Deklaration eines Namensbereichs mit einem Präfix erreicht, wobei die Namensbereich-Deklaration den Namen des Namensbereichs der gemeinsamen Sprachlaufzeit (Common Language Runtime, CLR) und optional einen Baugruppennamen angibt. Weitere Informationen finden Sie unter XAML Namespaces.
Im folgenden Codebeispiel wird ein XAML-Namespace für einen benutzerdefinierten Typ veranschaulicht, der eine angefügte Eigenschaft enthält, die innerhalb derselben Assembly definiert ist wie der Anwendungscode, der auf den benutzerdefinierten Typ verweist:
<ContentPage ... xmlns:local="clr-namespace:EffectsDemo" ...>
...
</ContentPage>
Die Namespacedeklaration wird dann beim Festlegen der angefügten Eigenschaft für ein bestimmtes Steuerelement verwendet, wie im folgenden XAML-Codebeispiel veranschaulicht:
<Label Text="Label Shadow Effect" local:ShadowEffect.HasShadow="true" />
Der äquivalente C#-Code ist im folgenden Codebeispiel zu sehen:
var label = new Label { Text = "Label Shadow Effect" };
ShadowEffect.SetHasShadow (label, true);
Verbrauchen einer angefügten Eigenschaft mit einer Formatvorlage
Angefügte Eigenschaften können auch durch eine Formatvorlage hinzugefügt werden. Das folgende XAML-Codebeispiel zeigt eine explizite Formatvorlage, die die HasShadow
angefügte Eigenschaft verwendet, die auf Label
Steuerelemente angewendet werden kann:
<Style x:Key="ShadowEffectStyle" TargetType="Label">
<Style.Setters>
<Setter Property="local:ShadowEffect.HasShadow" Value="true" />
</Style.Setters>
</Style>
Die Style
-Klasse kann auf eine Label
-Klasse angewendet werden, indem ihre Style
-Eigenschaft wie im folgenden Codebeispiel gezeigt mithilfe der Markuperweiterung StaticResource
für die Style
-Instanz festgelegt wird:
<Label Text="Label Shadow Effect" Style="{StaticResource ShadowEffectStyle}" />
Weitere Informationen zu Formatvorlagen finden Sie unter -Formatvorlagen.
Erweiterte Szenarios
Beim Erstellen einer angefügten Eigenschaft gibt es eine Reihe optionaler Parameter, die festgelegt werden können, um erweiterte Szenarien mit angefügten Eigenschaften zu ermöglichen. Dies umfasst das Erkennen von Eigenschaftsänderungen, das Überprüfen von Eigenschaftswerten und das Erzwingung von Eigenschaftswerten. Weitere Informationen finden Sie unter Erweiterte Szenarien.