Freigeben über


Übersicht über angefügte Eigenschaften

Eine angefügte Eigenschaft ist ein XAML-Konzept. Angefügte Eigenschaften ermöglichen das Festlegen zusätzlicher Eigenschafts-Wert-Paare für ein Objekt, aber die Eigenschaften sind nicht Teil der ursprünglichen Objektdefinition. Angefügte Eigenschaften werden in der Regel als eine spezielle Form von Abhängigkeitseigenschaft definiert, die keinen herkömmlichen Eigenschaftenwrapper im Objektmodell des Besitzertyps aufweist.

Voraussetzungen

Wir gehen davon aus, dass Sie das grundlegende Konzept von Abhängigkeitseigenschaften verstehen und eine Übersicht über Abhängigkeitseigenschaften haben.

Angefügte Eigenschaften in XAML

In XAML legen Sie angefügte Eigenschaften mithilfe der Syntax AttachedPropertyProvider.PropertyName fest. Hier ist ein Beispiel dafür, wie Sie Canvas.Left in XAML festlegen können.

<Canvas>
  <Button Canvas.Left="50">Hello</Button>
</Canvas>

Hinweis

Wir verwenden Canvas.Left nur als Beispiel angefügte Eigenschaft, ohne vollständig zu erklären, warum Sie sie verwenden möchten. Wenn Sie mehr darüber wissen möchten, wofür Canvas.Left dient und wie Canvas die untergeordneten Layouts behandelt, lesen Sie das Thema "Canvas-Referenz" oder "Definieren von Layouts mit XAML".

Warum werden angefügte Eigenschaften verwendet?

Angefügte Eigenschaften sind eine Möglichkeit, die Codierungskonventionen zu vermeiden, die verhindern können, dass verschiedene Objekte in einer Beziehung Informationen zur Laufzeit miteinander kommunizieren. Es ist sicherlich möglich, Eigenschaften auf eine gemeinsame Basisklasse zu setzen, damit jedes Objekt diese Eigenschaft einfach abrufen und festlegen kann. Aber schließlich werden die schiere Anzahl von Szenarien, in denen Sie dies tun möchten, Ihre Basisklassen mit gemeinsam nutzbaren Eigenschaften aufblähen. Es kann sogar Fälle geben, in denen es nur zwei von Hunderten von Nachfolgern gibt, die versuchen, eine Eigenschaft zu verwenden. Das ist kein gutes Klassendesign. Um dies zu beheben, ermöglicht das Konzept der angefügten Eigenschaft einem Objekt das Zuweisen eines Werts für eine Eigenschaft, die von der eigenen Klassenstruktur nicht definiert wird. Die definierende Klasse kann den Wert zur Laufzeit aus untergeordneten Objekten lesen, nachdem die verschiedenen Objekte in einer Objektstruktur erstellt wurden.

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. Dies ist der Fall bei der angefügten Canvas.Left-Eigenschaft. Canvas.Left wird als angefügte Eigenschaft erstellt, da sie für Elemente festgelegt wird, die in einem Canvas-Element enthalten sind, und nicht auf der Canvas selbst. Jedes mögliche untergeordnete Element verwendet dann Canvas.Left und Canvas.Top , um den Layoutoffset innerhalb des übergeordneten Canvas-Layoutcontainers anzugeben. Angefügte Eigenschaften ermöglichen dies, ohne das Objektmodell des Basiselements mit vielen Eigenschaften zu überladen, die jeweils nur auf einen der vielen möglichen Layoutcontainer angewendet werden. Stattdessen implementieren viele Layoutcontainer ihren eigenen Satz angefügter Eigenschaften.

Um die angefügte Eigenschaft zu implementieren, definiert die Canvas-Klasse ein statisches DependencyProperty-Feld mit dem Namen Canvas.LeftProperty. Anschließend stellt Canvas die Methoden SetLeft und GetLeft als öffentliche Accessoren für die angefügte Eigenschaft bereit, um sowohl XAML-Einstellung als auch Laufzeitwertzugriff zu ermöglichen. Für XAML und für das Abhängigkeitseigenschaftssystem erfüllt dieser Satz von APIs ein Muster, das eine bestimmte XAML-Syntax für angefügte Eigenschaften ermöglicht und den Wert im Abhängigkeitseigenschaftsspeicher speichert.

Verwendung angefügter Eigenschaften durch den Besitzertyp

Obwohl angefügte Eigenschaften für ein beliebiges XAML-Element (oder ein zugrunde liegendes DependencyObject) festgelegt werden können, bedeutet dies nicht automatisch, dass das Festlegen der Eigenschaft ein greifbares Ergebnis erzeugt oder dass auf den Wert jemals zugegriffen wird. Der Typ, der die angefügte Eigenschaft definiert, folgt in der Regel einem der folgenden Szenarien:

  • Der Typ, der die angefügte Eigenschaft definiert, ist das übergeordnete Element in einer Beziehung mit anderen Objekten. Die untergeordneten Objekte legen Werte für die angefügte Eigenschaft fest. Der Besitzertyp der angefügten Eigenschaft weist ein gewisses angeborenes Verhalten auf, das seine untergeordneten Elemente durchläuft, die Werte abruft und an einem bestimmten Punkt der Objektlebensdauer auf diese Werte wirkt (eine Layoutaktion, SizeChanged usw.)
  • Der Typ, der die angefügte Eigenschaft definiert, wird als untergeordnetes Element für eine Vielzahl möglicher übergeordneter Elemente und Con Zelt-Modus ls verwendet, aber die Informationen sind nicht unbedingt Layoutinformationen.
  • Die angefügte Eigenschaft meldet Informationen an einen Dienst, nicht an ein anderes UI-Element.

Weitere Informationen zu diesen Szenarien und zum Besitzen von Typen finden Sie im Abschnitt "Weitere Informationen zu Canvas.Left" von benutzerdefinierten angefügten Eigenschaften.

Angefügte Eigenschaften in Code

Angefügte Eigenschaften verfügen nicht über die typischen Eigenschaftenwrapper zum einfachen Abrufen und Festlegen des Zugriffs wie andere Abhängigkeitseigenschaften. Dies liegt daran, dass die angefügte Eigenschaft nicht unbedingt Teil des codezentrierten Objektmodells für Instanzen ist, in denen die Eigenschaft festgelegt ist. (Es ist jedoch ungewöhnlich, eine Eigenschaft zu definieren, die sowohl eine angefügte Eigenschaft ist, die andere Typen für sich selbst festlegen können, als auch eine herkömmliche Eigenschaftsnutzung für den eigenen Typ.)

Es gibt zwei Möglichkeiten zum Festlegen einer angefügten Eigenschaft im Code: Verwenden Sie die Eigenschaftensystem-APIs, oder verwenden Sie die XAML-Musteraccessoren. Diese Techniken sind in Bezug auf ihr Endergebnis ziemlich gleichwertig, sodass eine zu verwendende methode hauptsächlich eine Frage des Codierungsstils ist.

Verwenden des Eigenschaftensystems

Angefügte Eigenschaften für die Windows-Runtime werden als Abhängigkeitseigenschaften implementiert, sodass die Werte im freigegebenen Abhängigkeitseigenschaftsspeicher vom Eigenschaftensystem gespeichert werden können. Daher machen angefügte Eigenschaften einen Abhängigkeitseigenschaftsbezeichner für die besitzende Klasse verfügbar.

Zum Festlegen einer angefügten Eigenschaft im Code rufen Sie die SetValue-Methode auf und übergeben das DependencyProperty-Feld, das als Bezeichner für diese angefügte Eigenschaft dient. (Sie übergeben auch den festzulegenden Wert.)

Um den Wert einer angefügten Eigenschaft im Code abzurufen, rufen Sie die GetValue-Methode auf, und übergeben erneut das DependencyProperty-Feld, das als Bezeichner dient.

Verwenden des XAML-Accessormusters

Ein XAML-Prozessor muss in der Lage sein, angefügte Eigenschaftswerte festzulegen, wenn XAML in eine Objektstruktur analysiert wird. Der Besitzertyp der angefügten Eigenschaft muss dedizierte Accessormethoden implementieren, die im Formular "GetPropertyName" und "SetPropertyName" benannt sind. Diese dedizierten Accessormethoden sind auch eine Möglichkeit, die angefügte Eigenschaft im Code abzurufen oder festzulegen. Aus Codeperspektive ähnelt eine angefügte Eigenschaft einem Sicherungsfeld, das Methodenaccessoren anstelle von Eigenschaftsaccessoren aufweist, und dass das Sicherungsfeld für jedes Objekt vorhanden sein kann, anstatt spezifisch definiert werden zu müssen.

Das nächste Beispiel zeigt, wie Sie eine angefügte Eigenschaft im Code über die XAML-Accessor-API festlegen können. In diesem Beispiel myCheckBox handelt es sich um eine Instanz der CheckBox-Klasse . Die letzte Zeile ist der Code, der den Wert tatsächlich festlegt; die Zeilen davor richten nur die Instanzen und ihre Beziehung zwischen übergeordneten und untergeordneten Elementen ein. Die nicht kommentierte letzte Zeile ist die Syntax, wenn Sie das Eigenschaftensystem verwenden. Die kommentierte letzte Zeile ist die Syntax, wenn Sie das XAML-Accessormuster verwenden.

    Canvas myC = new Canvas();
    CheckBox myCheckBox = new CheckBox();
    myCheckBox.Content = "Hello";
    myC.Children.Add(myCheckBox);
    myCheckBox.SetValue(Canvas.TopProperty,75);
    //Canvas.SetTop(myCheckBox, 75);
    Dim myC As Canvas = New Canvas()
    Dim myCheckBox As CheckBox= New CheckBox()
    myCheckBox.Content = "Hello"
    myC.Children.Add(myCheckBox)
    myCheckBox.SetValue(Canvas.TopProperty,75)
    ' Canvas.SetTop(myCheckBox, 75)
Canvas myC;
CheckBox myCheckBox;
myCheckBox.Content(winrt::box_value(L"Hello"));
myC.Children().Append(myCheckBox);
myCheckBox.SetValue(Canvas::TopProperty(), winrt::box_value(75));
// Canvas::SetTop(myCheckBox, 75);
    Canvas^ myC = ref new Canvas();
    CheckBox^ myCheckBox = ref new CheckBox();
    myCheckBox->Content="Hello";
    myC->Children->Append(myCheckBox);
    myCheckBox->SetValue(Canvas::TopProperty,75);
    // Canvas::SetTop(myCheckBox, 75);

Benutzerdefinierte angefügte Eigenschaften

Codebeispiele zum Definieren von benutzerdefinierten angefügten Eigenschaften und weitere Informationen zu szenarien für die Verwendung einer angefügten Eigenschaft finden Sie unter Benutzerdefinierte angefügte Eigenschaften.

Spezielle Syntax für Verweise auf angefügte Eigenschaften

Der Punkt in einem angefügten Eigenschaftennamen ist ein wichtiger Teil des Identifikationsmusters. Manchmal gibt es Mehrdeutigkeiten, wenn eine Syntax oder Situation den Punkt als eine andere Bedeutung behandelt. Beispielsweise wird ein Punkt als Objektmodell-Traversal für einen Bindungspfad behandelt. In den meisten Fällen mit einer solchen Mehrdeutigkeit gibt es eine spezielle Syntax für eine angefügte Eigenschaft, mit der der innere Punkt weiterhin als Besitzer analysiert werden kann.Eigenschaftstrennzeichen einer angefügten Eigenschaft.

  • Wenn Sie eine angefügte Eigenschaft als Teil eines Zielpfads für eine Animation angeben möchten, schließen Sie den Namen der angefügten Eigenschaft in Klammern ("()") ein, z. B. "(Canvas.Left)". Weitere Informationen finden Sie unter Property-path-Syntax.

Warnung

Eine bestehende Einschränkung der Windows-Runtime XAML-Implementierung besteht darin, dass Sie keine benutzerdefinierte angefügte Eigenschaft animieren können.

  • Wenn Sie eine angefügte Eigenschaft als Zieleigenschaft für einen Ressourcenverweis aus einer Ressourcendatei auf x:Uid angeben möchten, verwenden Sie eine spezielle Syntax, die eine Codeformatvorlage einfügt, vollqualifizierte using: Deklaration in eckigen Klammern ("[]"), um einen absichtlichen Bereichsumbruch zu erstellen. Wenn beispielsweise ein Element <TextBlock x:Uid="Title" />vorhanden ist, lautet der Ressourcenschlüssel in der Ressourcendatei, der auf den Canvas.Top Wert für diese Instanz ausgerichtet ist: "Title.[ using:Windows.UI.Xaml.Controls]Canvas.Top". Weitere Informationen zu Ressourcendateien und XAML finden Sie in der Schnellstartanleitung: Übersetzen von UI-Ressourcen.