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:

  1. Erstellen Sie eine BindableProperty Instanz mit einer der CreateAttached Methodenüberladungen.
  2. Stellen Sie staticGetPropertyName- 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 GetPropertyName- 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 GetPropertyName Zugriffsmethode sollte der folgenden Signatur entsprechen:

public static valueType GetPropertyName(BindableObject target)

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

public static void SetPropertyName(BindableObject target, valueType value)

Die SetPropertyName 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.