Angefügte Eigenschaften

Beispiel herunterladen Das Beispiel herunterladen

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 Gridsind, 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:

  1. Erstellen Sie eine BindableProperty instance mit einer der CreateAttached Methodenüberladungen.
  2. Geben Sie staticGetdie Methoden PropertyName und SetPropertyName 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 BindableObjectabgeleitet sein.

Eine angefügte Eigenschaft kann erstellt werden, indem eine public static readonly Eigenschaft vom Typ BindablePropertydeklariert 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 GetPropertyName - und SetPropertyName-Methoden sind als Accessoren für die angefügte Eigenschaft erforderlich, andernfalls kann das Eigenschaftensystem 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, 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 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 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 BindableObjectabgeleitet 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.