Angefügte Eigenschaften
Angefügte Eigenschaften ermöglichen es einem -Objekt, einen Wert für eine Eigenschaft zuzuweisen, die von seiner eigenen Klasse nicht definiert wird. Beispielsweise können untergeordnete Elemente angefügte Eigenschaften verwenden, um ihr übergeordnetes 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 und Grid.Column
die Grid.Row
angefügten Eigenschaften festgelegt werden. Grid.Row
und Grid.Column
sind angefügte Eigenschaften, da sie für Elemente festgelegt werden, die untergeordnete Elemente eines Grid
sind, und nicht für die Grid
sich selbst.
Bindbare Eigenschaften sollten in den folgenden Szenarien als angefügte Eigenschaften implementiert werden:
- Wenn ein Eigenschafteneinstellungsmechanismus für andere Klassen als die definierende Klasse verfügbar sein muss.
- Wenn die -Klasse einen Dienst darstellt, der problemlos in andere 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 sieht wie folgt aus:
- Erstellen Sie eine
BindableProperty
instance mit einer derCreateAttached
Methodenüberladungen. - Geben Sie
static
Get
die Methoden PropertyName undSet
PropertyName als Accessoren für die angefügte Eigenschaft an.
Erstellen einer Eigenschaft
Beim Erstellen einer angefügten Eigenschaft zur Verwendung in anderen Typen muss die Klasse, in der die Eigenschaft erstellt wird, nicht von abgeleitet werden BindableObject
. Die Zieleigenschaft für Accessors sollte jedoch von sein oder von BindableObject
abgeleitet sein.
Eine angefügte Eigenschaft kann erstellt werden, indem eine public static readonly
Eigenschaft vom Typ BindableProperty
deklariert wird. Die bindbare Eigenschaft sollte auf den zurückgegebenen Wert einer der BindableProperty.CreateAttached
Methodenüberladungen festgelegt werden. Die Deklaration sollte sich innerhalb des Textkörpers der besitzenden Klasse, aber außerhalb aller Memberdefinitionen enthalten.
Wichtig
Die Benennungskonvention für angefügte Eigenschaften besteht darin, dass der bezeichner der angefügten Eigenschaft mit dem in der CreateAttached
-Methode angegebenen Eigenschaftennamen übereinstimmen muss, wobei "Property" an ihn angefügt wird.
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 mit dem Namen erstellt HasShadowProperty
, vom Typ bool
. Die -Eigenschaft gehört der ShadowEffect
-Klasse und weist den Standardwert auf 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 - und Set
PropertyName-Methoden sind als Accessoren für die angefügte Eigenschaft erforderlich, andernfalls kann das Eigenschaftensystem 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, den bezeichner für die bindungsfähige Eigenschaft übergeben, für 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 und den bezeichner für die bindungsfähige Eigenschaft, für den der Wert festgelegt werden soll, und den festzulegenden Wert übergeben.
Für beide Accessoren sollte das Zielobjekt von sein oder von BindableObject
abgeleitet sein.
Das folgende Codebeispiel zeigt Accessors 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 aus XAML oder Code verwendet werden. In XAML wird dies durch Deklarieren eines Namespace mit einem Präfix erreicht, wobei die Namespacedeklaration den CLR-Namespacenamen (Common Language Runtime) und optional einen Assemblynamen angibt. Weitere Informationen finden Sie unter XAML-Namespaces.
Das folgende Codebeispiel veranschaulicht einen XAML-Namespace für einen benutzerdefinierten Typ, der eine angefügte Eigenschaft enthält, die in derselben Assembly wie der Anwendungscode definiert ist, der auf den benutzerdefinierten Typ verweist:
<ContentPage ... xmlns:local="clr-namespace:EffectsDemo" ...>
...
</ContentPage>
Die Namespacedeklaration wird dann verwendet, wenn die angefügte Eigenschaft für ein bestimmtes Steuerelement festgelegt wird, 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);
Verwenden einer angefügten Eigenschaft mit einer Formatvorlage
Angefügte Eigenschaften können einem Steuerelement 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 Styles (Formatvorlagen).
Erweiterte Szenarios
Beim Erstellen einer angefügten Eigenschaft gibt es eine Reihe optionaler Parameter, die festgelegt werden können, um erweiterte Szenarien für angefügte Eigenschaften zu ermöglichen. Dazu gehören das Erkennen von Eigenschaftenänderungen, das Überprüfen von Eigenschaftswerten und das Coercing von Eigenschaftswerten. Weitere Informationen finden Sie unter Erweiterte Szenarien.