Angefügte Eigenschaften
Angefügte Eigenschaften ermöglichen es einem Objekt, einen Wert für eine Eigenschaft zuzuweisen, die seine eigene Klasse nicht definiert. Beispielsweise können untergeordnete Elemente angefügte Eigenschaften verwenden, um das übergeordnete Element darüber zu informieren, wie sie in der Benutzeroberfläche dargestellt werden sollen. Das Grid
Steuerelement ermöglicht es, die Zeile und Spalte eines untergeordneten Elements anzugeben, indem die angefügten Eigenschaften festgelegt Grid.Row
und Grid.Column
festgelegt werden. Grid.Row
und Grid.Column
sind angefügte Eigenschaften, da sie auf Elementen festgelegt sind, die untergeordnete Elemente einer Grid
, anstatt auf sich Grid
selbst sind.
Bindungsfähige Eigenschaften sollten in den folgenden Szenarien als angefügte Eigenschaften implementiert werden:
- Wenn es einen Eigenschaftseinstellungsmechanismus gibt, der für Klassen außer der definierenden Klasse verfügbar ist.
- Wenn die Klasse einen Dienst darstellt, der einfach mit anderen Klassen integriert werden muss.
Weitere Informationen zu bindungsfähigen Eigenschaften finden Sie unter Bindable Properties.
Erstellen einer angefügten Eigenschaft
Der Prozess zum Erstellen einer angefügten Eigenschaft ist wie folgt:
- Erstellen Sie eine Instanz mit einer
BindableProperty
derCreateAttached
Methodenüberladungen. - Stellen Sie
static
Get
Die Methoden "PropertyName " undSet
"PropertyName " als Accessoren für die angefügte Eigenschaft bereit.
Erstellen einer Eigenschaft
Wenn Sie eine angefügte Eigenschaft für die Verwendung in anderen Typen erstellen, muss die Klasse, von der die Eigenschaft erstellt wird, nicht abgeleitet BindableObject
werden. Die Zieleigenschaft für Accessoren sollte jedoch von oder aus abgeleitet BindableObject
werden.
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 Textkörper der eigenen Klasse befinden, aber außerhalb aller Memberdefinitionen.
Wichtig
Die Benennungskonvention für angefügte Eigenschaften besteht darin, dass der angefügte Eigenschaftsbezeichner dem in der CreateAttached
Methode angegebenen Eigenschaftsnamen entspricht, wobei "Property" darauf angefügt ist.
Der folgende Code zeigt ein Beispiel für eine angefügte Eigenschaft:
public static readonly BindableProperty HasShadowProperty =
BindableProperty.CreateAttached ("HasShadow", typeof(bool), typeof(ShadowEffect), false);
Dadurch wird eine angefügte Eigenschaft namens HasShadowProperty
" vom Typ bool
" erstellt. Die Eigenschaft befindet sich im Besitz 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 Accessoren
Statische Get
PropertyName- undSet
PropertyName-Methoden sind als Accessoren für die angefügte Eigenschaft erforderlich, andernfalls kann das Eigenschaftssystem die angefügte Eigenschaft nicht verwenden. Der Get
PropertyName-Accessor sollte der folgenden Signatur entsprechen:
public static valueType GetPropertyName(BindableObject target)
Der Get
PropertyName-Accessor sollte den Wert zurückgeben, der im entsprechenden BindableProperty
Feld für die angefügte Eigenschaft enthalten ist. Dies kann erreicht werden, indem Sie die GetValue
Methode aufrufen, indem Sie den bindungsfähigen Eigenschaftsbezeichner übergeben, auf den der Wert abgerufen werden soll, und dann den resultierenden Wert in den erforderlichen Typ umwandeln.
Der Set
PropertyName-Accessor sollte der folgenden Signatur entsprechen:
public static void SetPropertyName(BindableObject target, valueType value)
Der Set
PropertyName-Accessor sollte den Wert des entsprechenden BindableProperty
Felds für die angefügte Eigenschaft festlegen. Dies kann erreicht werden, indem Sie die SetValue
Methode aufrufen, indem Sie den bindungsfähigen Eigenschaftsbezeichner übergeben, auf den der Wert festgelegt werden soll, und der zu festlegende Wert.
Für beide Accessoren sollte das Zielobjekt von oder von BindableObject
diesem abgeleitet sein.
Das folgende Codebeispiel zeigt Accessoren für die HasShadow
angefügte Eigenschaft:
public static bool GetHasShadow (BindableObject view)
{
return (bool)view.GetValue (HasShadowProperty);
}
public static void SetHasShadow (BindableObject view, bool value)
{
view.SetValue (HasShadowProperty, value);
}
Verwenden einer angefügten Eigenschaft
Nachdem eine angefügte Eigenschaft erstellt wurde, kann sie von XAML oder Code verwendet werden. In XAML wird dies durch Deklarieren eines Namespace mit einem Präfix erreicht, wobei die Namespacedeklaration den Namespacenamen (Common Language Runtime, CLR) und optional einen Assemblynamen 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 in derselben Assembly wie der Anwendungscode definiert wird, der auf den benutzerdefinierten Typ verweist:
<ContentPage ... xmlns:local="clr-namespace:EffectsDemo" ...>
...
</ContentPage>
Die Namespacedeklaration wird dann beim Festlegen der angefügten Eigenschaft auf einem bestimmten Steuerelement verwendet, wie im folgenden XAML-Codebeispiel gezeigt:
<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);
Verwenden einer angefügten Eigenschaft mit einer Formatvorlage
Angefügte Eigenschaften können auch einem Steuerelement 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 Styles (Formatvorlagen).
Erweiterte Szenarios
Beim Erstellen einer angefügten Eigenschaft gibt es eine Reihe optionaler Parameter, die festgelegt werden können, um erweiterte angefügte Eigenschaftsszenarien zu aktivieren. Dazu gehören die Erkennung von Eigenschaftenänderungen, die Überprüfung von Eigenschaftenwerten und die Koerzierung von Eigenschaftswerten. Weitere Informationen finden Sie unter "Erweiterte Szenarien".