Angefügte Eigenschaften

Download Sample Das Beispiel herunterladen

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:

  1. Erstellen Sie eine Instanz mit einer BindableProperty der CreateAttached Methodenüberladungen.
  2. Stellen Sie staticGetDie Methoden "PropertyName " und Set"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 BindableObjectwerden. Die Zieleigenschaft für Accessoren sollte jedoch von oder aus abgeleitet BindableObjectwerden.

Eine angefügte Eigenschaft kann durch Deklarieren einer public static readonly Eigenschaft vom Typ BindablePropertyerstellt 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 GetPropertyName- undSetPropertyName-Methoden sind als Accessoren für die angefügte Eigenschaft erforderlich, andernfalls kann das Eigenschaftssystem die angefügte Eigenschaft nicht verwenden. Der GetPropertyName-Accessor sollte der folgenden Signatur entsprechen:

public static valueType GetPropertyName(BindableObject target)

Der GetPropertyName-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 SetPropertyName-Accessor sollte der folgenden Signatur entsprechen:

public static void SetPropertyName(BindableObject target, valueType value)

Der SetPropertyName-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 BindableObjectdiesem 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".