(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Übersicht über angefügte Eigenschaften

Angefügte Eigenschaft ist ein in XAML definierter Begriff. Angefügte Eigenschaften sollen als Typ einer globalen Eigenschaft verwendet werden, die für jedes Objekt festgelegt werden können. In Windows Presentation Foundation (WPF)angefügte Eigenschaften werden in der Regel als Sonderform der Abhängigkeitseigenschaft definiert, die nicht die herkömmliche Eigenschaft besitzt.

Dieses Thema enthält folgende Abschnitte.

In diesem Thema wird vorausgesetzt, dass Sie sich aus Sicht eines Consumers vorhandener Abhängigkeitseigenschaften in Windows Presentation Foundation (WPF)-Klassen auskennen und die Übersicht über Abhängigkeitseigenschaften gelesen haben. Um den Beispielen in diesem Thema folgen zu können, sollten Sie außerdem XAML verstehen und WPF-Anwendungen schreiben.

Ein Zweck einer angefügten Eigenschaft besteht darin, es verschiedenen untergeordneten Elementen zu ermöglichen, eindeutige Werte für eine Eigenschaft anzugeben, die eigentlich in einem übergeordneten Element definiert ist. Eine spezielle Anwendung dieses Szenarios ist zum Beispiel, wenn untergeordnete Elemente das übergeordnete Element darüber informieren, wie sie in der Benutzeroberfläche (user interface, UI) dargestellt werden sollen. Ein Beispiel hierfür ist die DockPanel.Dock-Eigenschaft. Die DockPanel.Dock-Eigenschaft wird als angefügte Eigenschaft erstellt, da sie zum Festlegen für Elemente vorgesehen ist, die sich in einem DockPanel befinden, nicht zum Festlegen für DockPanel selbst. Die DockPanel-Klasse definiert das statische Feld DependencyProperty mit dem Namen DockProperty und stellt dann die Methoden GetDock und SetDock als öffentliche Accessoren für die angefügte Eigenschaft bereit.

In XAML legen Sie angefügte Eigenschaften fest, indem Sie die Syntax Anbieter der angefügten Eigenschaft.Eigenschaftenname verwenden.  

Im Folgenden finden Sie ein Beispiel für das Festlegen von DockPanel.Dock in XAML:


<DockPanel>
  <CheckBox DockPanel.Dock="Top">Hello</CheckBox>
</DockPanel>


Beachten Sie, dass die Verwendung einer statischen Eigenschaft ähnelt. Sie verweisen jeweils auf den Typ DockPanel, der die angefügte Eigenschaft besitzt und registriert, anstatt auf eine Instanz zu verweisen, die über den Namen angegeben ist.

Da eine angefügte Eigenschaft in XAML ein im Markup festgelegtes Attribut ist, ist nur der Set-Vorgang von Bedeutung. Obwohl einige indirekte Mechanismen zum Vergleichen von Werten existieren, z. B. Trigger in Stilen, können sie eine Eigenschaft in XAML nicht direkt abrufen (Einzelheiten finden Sie unter Erstellen von Formaten und Vorlagen).

ms749011.collapse_all(de-de,VS.110).gifImplementierung von angefügten Eigenschaften in WPF

In Windows Presentation Foundation(WPF) werden die meisten angefügten Eigenschaften, die von mit Benutzeroberflächenpräsentation in Beziehung stehenden WPF-Typen existieren, als Abhängigkeitseigenschaften implementiert. Angefügte Eigenschaften sind ein XAML Konzept, wohingegen Abhängigkeitseigenschaften ein WPF Konzept sind. Da angefügte Eigenschaften in WPF Abhängigkeitseigenschaften sind unterstützen sie Abhängigkeitseigenschaftskonzepte wie Eigenschaftenmetadaten und deren Standardwerte.

Obwohl angefügte Eigenschaften für jedes Objekt festgelegt werden können, bedeutet dies nicht automatisch, dass das Festlegen der Eigenschaft zu einem greifbaren Ergebnis führt oder dass der Wert jemals von einem anderen Objekt verwendet wird. Im Allgemeinen werden angefügte Eigenschaften mit der Absicht verwendet, dass Objekte, die aus den verschiedensten Klassenhierarchien oder logischen Beziehungen stammen, jeweils gemeinsame Informationen an den Typ melden können, der die angefügte Eigenschaft definiert. Der Typ, der die angefügte Eigenschaft definiert, folgt in der Regel einem dieser Modelle:

  • Der Typ, der die angefügte Eigenschaft definiert, ist so konzipiert, dass er das übergeordnete Element der Elemente sein kann, die die Werte für die angefügte Eigenschaft festlegen. Der Typ durchläuft seine untergeordneten Objekte dann mithilfe von interner Logik entsprechend der Objektstruktur, ruft die Werte ab und führt basierend auf den Werten entsprechende Schritte aus.

  • Der Typ, der die angefügte Eigenschaft definiert, wird als untergeordnetes Element für verschiedene mögliche übergeordnete Elemente und Inhaltsmodelle verwendet.

  • Der Typ, der die angefügte Eigenschaft definiert, stellt einen Dienst dar. Andere Typen legen Werte für die angefügte Eigenschaft fest. Wenn das Element, das die Eigenschaft festgelegt hat, dann im Kontext des Dienstes ausgewertet wird, werden die Werte der angefügten Eigenschaft mithilfe der internen Logik der Dienstklasse abgerufen.

ms749011.collapse_all(de-de,VS.110).gifBeispiel für eine von einem übergeordneten Element definierte angefügte Eigenschaft

Das häufigste Szenario, bei dem WPF eine angefügte Eigenschaft definiert, besteht darin, dass ein übergeordnetes Element eine Auflistung untergeordneter Elemente unterstützt und zusätzlich ein Verhalten implementiert, bei dem die spezifischen Merkmale des Verhaltens für jedes untergeordnete Element einzeln gemeldet werden.

DockPanel definiert die angefügte DockPanel.Dock-Eigenschaft, und DockPanel verfügt als Teil der Renderinglogik über Klassenebenencode (MeasureOverride und ArrangeOverride). Eine DockPanel-Instanz prüft immer, ob eines ihrer direkt untergeordneten Elemente einen Wert für DockPanel.Dock festgelegt hat. Wenn dies der Fall ist, werden diese Werte zur Eingabe für die Renderinglogik, die auf das jeweilige untergeordnete Element angewendet wird. Geschachtelte DockPanel-Instanzen behandeln jeweils ihre eigenen Auflistungen direkt untergeordneter Elemente. Dieses Verhalten richtet sich jedoch spezifisch für die jeweilige Implementierung danach, wie das DockPanel-Element die DockPanel.Dock-Werte verarbeitet. Es ist theoretisch möglich, angefügte Eigenschaften zu verwenden, die sich auf Elemente über das unmittelbar übergeordnete Element hinaus auswirken. Wenn die angefügte DockPanel.Dock-Eigenschaft für ein Element festgelegt wird, das nicht über ein übergeordnetes DockPanel-Element verfügt, das auf dieses Element wirkt, wird kein Fehler und keine Ausnahme ausgelöst. Dies bedeutet lediglich, dass ein globaler Eigenschaftswert festgelegt wurde, der jedoch kein übergeordnetes DockPanel-Element aufweist, das die Informationen verwenden könnte.

Angefügte Eigenschaften in WPF verfügen nicht über die typischen CLR-Wrappermethoden für den einfachen get/set-Zugriff. Dies liegt daran, dass die angefügte Eigenschaft nicht zwingend Teil des CLR-Namespace für Instanzen ist, für die die Eigenschaft festgelegt ist. Allerdings muss ein XAML-Prozessor in der Lage sein, diese Werte festzulegen, wenn XAML analysiert wird. Um eine effektive Verwendung angefügter Eigenschaften zu unterstützen, muss der Besitzertyp der angefügten Eigenschaft dedizierte Accessormethoden in der Form GetPropertyName und SetPropertyName implementieren. Diese dedizierten Accessormethoden sind außerdem nützlich, um die angefügte Eigenschaft im Code festzulegen bzw. abzurufen. Aus Codesicht ähnelt eine angefügte Eigenschaft einem dahinter liegenden Feld, das anstelle von Eigenschaftenaccessoren über Methodenaccessoren verfügt. Das dahinter liegende Feld kann für ein Objekt vorhanden sein und muss nicht speziell definiert werden.

Das folgende Beispiel zeigt, wie Sie im Code eine angefügte Eigenschaft festlegen können. In diesem Beispiel ist myCheckBox eine Instanz der CheckBox-Klasse.


DockPanel myDockPanel = new DockPanel();
CheckBox myCheckBox = new CheckBox();
myCheckBox.Content = "Hello";
myDockPanel.Children.Add(myCheckBox);
DockPanel.SetDock(myCheckBox, Dock.Top);


Ähnelt dem XAML-Fall, wenn myCheckBox nicht bereits als untergeordnetes Element myDockPanel durch die dritte Codezeile hinzugefügt worden wäre, würde die vierte Zeile keine Ausnahme auslösen, aber der Eigenschaftswert würde nicht mit Elementen DockPanel interagieren und somit nichts tun würden. Nur ein DockPanel.Dock-Wert, der für ein untergeordnetes Element in Kombination mit dem Vorhandensein eines übergeordneten DockPanel-Elements festgelegt wird, ruft in der gerenderten Anwendung ein Verhalten hervor. (In diesem Fall könnten Sie die angefügte Eigenschaft festlegen und dann an die Struktur anfügen. Oder Sie könnten die angefügte Eigenschaft an die Struktur anfügen und dann festlegen. Das Ergebnis ist unabhängig von der Reihenfolge dasselbe.)

Beim Registrieren der Eigenschaft wird FrameworkPropertyMetadata festgelegt, um die Merkmale der Eigenschaft anzugeben, zum Beispiel ob sich die Eigenschaft auf das Rendering, die Messung usw. auswirkt. Die Metadaten für eine angefügte Eigenschaft unterscheiden sich im Allgemeinen nicht von denen einer Abhängigkeitseigenschaft. Wenn Sie in einer Überschreibung für die Metadaten einer angefügten Eigenschaft einen Standardwert angeben, wird dieser Wert zum Standardwert der impliziten angefügten Eigenschaft von Instanzen der überschreibenden Klasse. Der Standardwert wird gemeldet, wenn ein Prozess den Wert einer angefügten Eigenschaft über den Get-Methodenaccessor für diese Eigenschaft abfragt und dabei eine Instanz der Klasse angibt, in der Sie die Metadaten festgelegt haben, und der Wert für diese angefügte Eigenschaft nicht auf andere Weise festgelegt wurde.

Wenn Sie für eine Eigenschaft die Vererbung von Eigenschaftswerten aktivieren möchten, sollten Sie anstelle von nicht angefügten Abhängigkeitseigenschaften angefügte Eigenschaften verwenden. Ausführliche Informationen finden Sie unter Vererbung von Eigenschaftswerten.

ms749011.collapse_all(de-de,VS.110).gifWann wird eine angefügte Eigenschaft erstellt?

Sie können eine angefügte Eigenschaft erstellen, wenn es erforderlich ist, einen Mechanismus zum Festlegen von Eigenschaften für andere Klassen als die definierende Klasse bereitzustellen. Am häufigsten werden für dieses Szenario die Layoutfunktionen verwendet. Beispiele für vorhandene Layouteigenschaften sind DockPanel.Dock, Panel.ZIndex und Canvas.Top. Bei diesem Szenario sind Elemente, die als untergeordnete Elemente von Elementen der Layoutsteuerung vorhanden sind, dazu in der Lage, Layoutanforderungen einzeln für ihre übergeordneten Layoutelemente auszudrücken. Die Elemente legen jeweils einen Eigenschaftswert fest, den das übergeordnete Element als angefügte Eigenschaft definiert hat.

Ein anderes Szenario der Verwendung einer angefügten Eigenschaft ist, wenn Ihre Klasse einen Dienst darstellt und Sie möchten, dass Klassen den Dienst auf transparentere Weise integrieren können.

Ein weiteres Szenario ist die Visual Studio 2008-WPF-Designer-Unterstützung, zum Beispiel die Bearbeitung im Fenster Eigenschaften. Weitere Informationen finden Sie unter Übersicht über das Erstellen von Steuerelementen.

Wie bereits erwähnt, sollten Sie die Registrierung als angefügte Eigenschaft durchführen, wenn Sie die Vererbung von Eigenschaftswerten verwenden möchten.

ms749011.collapse_all(de-de,VS.110).gifErstellen einer angefügten Eigenschaft

Wenn Ihre Klasse die angefügte Eigenschaft nur für die Verwendung auf anderen Typen definiert, muss die Klasse keine Ableitung von DependencyObject durchführen. Sie müssen jedoch von DependencyObject ableiten, wenn Sie dem generellen WPF Modell folgen, das Ihre angefügte Eigenschaft ebenfalls als Abhängigkeitseigenschaft definiert.

Definieren Sie die angefügte Eigenschaft als Abhängigkeitseigenschaft, indem Sie ein public static readonly-Feld vom Typ DependencyProperty deklarieren. Sie definieren dieses Feld, indem Sie den Rückgabewert der RegisterAttached-Methode verwenden. Der Feldname muss mit dem Namen der angefügten Eigenschaft übereinstimmen, dem die Zeichenfolge Property angehängt wird, um das gängige WPF-Muster für die Benennung der identifizierenden Felder und der zugrunde liegenden Eigenschaften einzuhalten. Der angefügte Eigenschaftenanbieter muss statische GetPropertyName und SetPropertyName-Methoden als Accessoren für die angefügte Eigenschaft bereitstellen. Anderenfalls ist das Eigenschaftensystem nicht in der Lage die angefügte Eigenschaft zu verwenden.

Hinweis Hinweis

Wenn Sie den get-Accessor der angefügten Eigenschaft ausschließen, funktioniert die Datenbindung für die Eigenschaft nicht in Entwurfstools wie Visual Studio und Expression Blend.

ms749011.collapse_all(de-de,VS.110).gifget-Accessor

Die Signatur für den GetPropertyName Accessor muss wie folgt lauten:

public static object Get PropertyName (object target )

  • Das target-Objekt kann in der Implementierung als spezifischerer Typ angegeben werden. Die DockPanel.GetDock-Methode verwendet den Parameter zum Beispiel in der Form UIElement, da die angefügte Eigenschaft nur für die Festlegung für UIElement-Instanzen vorgesehen ist.

  • Der Rückgabewert kann in der Implementierung als spezifischerer Typ angegeben werden. Die GetDock-Methode verwendet zum Beispiel die Form Dock, da der Wert nur für diese Enumeration festgelegt werden kann.

ms749011.collapse_all(de-de,VS.110).gifset-Accessor

Die Signatur für den SetPropertyName Accessor muss wie folgt lauten:

public static void Set PropertyName (object target , object value )

  • Das target-Objekt kann in der Implementierung als spezifischerer Typ angegeben werden. Die SetDock-Methode verwendet zum Beispiel die Form UIElement, da die angefügte Eigenschaft nur für die Festlegung für UIElement-Instanzen vorgesehen ist.

  • Das value-Objekt kann in der Implementierung als spezifischerer Typ angegeben werden. Die SetDock-Methode verwendet zum Beispiel die Form Dock, da der Wert nur für diese Enumeration festgelegt werden kann. Denken Sie daran, dass der Wert für diese Methode die Eingabe darstellt, die vom XAML-Ladeprogramm eingeht, wenn dieses im Markup Ihre angefügte Eigenschaft in der Verwendung einer angefügten Eigenschaft antrifft. Die Eingabe ist der Wert, der als XAML-Attributwert im Markup angegeben wird. Aus diesem Grund muss für den verwendeten Typ Unterstützung für die Typkonvertierung, ein Wertserialisierungsprogramm oder die Markuperweiterung vorhanden sein, damit aus dem Attributwert (eigentlich nur eine Zeichenfolge) der jeweils erforderliche Typ erstellt werden kann.

Das folgende Beispiel zeigt die Registrierung der Abhängigkeitseigenschaft (mithilfe der RegisterAttached-Methode) sowie die GetPropertyName und SetPropertyName Accessoren. Im Beispiel lautet der Name der angefügten Eigenschaft IsBubbleSource. Deshalb müssen die Accessoren GetIsBubbleSource und SetIsBubbleSource genannt werden.


public static readonly DependencyProperty IsBubbleSourceProperty = DependencyProperty.RegisterAttached(
  "IsBubbleSource",
  typeof(Boolean),
  typeof(AquariumObject),
  new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)
);
public static void SetIsBubbleSource(UIElement element, Boolean value)
{
  element.SetValue(IsBubbleSourceProperty, value);
}
public static Boolean GetIsBubbleSource(UIElement element)
{
  return (Boolean)element.GetValue(IsBubbleSourceProperty);
}


ms749011.collapse_all(de-de,VS.110).gifAttribute von angefügten Eigenschaften

WPF definiert mehrere .NET Framework-Attribute-Elemente, mit deren Hilfe für Reflektionsprozesse und typische Nutzer von Reflektions- und Eigenschaftendaten Informationen zu angefügten Eigenschaften bereitgestellt werden sollen. Da angefügte Eigenschaften einen Typ unbegrenzten Bereichs haben, benötigen Designer eine Möglichkeit zu vermeiden, dass Benutzer mit einer globalen Liste aller angefügten Eigenschaften, die in einer bestimmten XAML verwendenden Technologieimplementierung definiert sind, überwältigt werden. Sie können die .NET Framework-Attribute-Elemente, die WPF für angefügte Eigenschaften definiert, verwenden, um den Umfang für Situationen festzulegen, in denen eine bestimmte angefügte Eigenschaft in einem Eigenschaftenfenster angezeigt werden soll. Sie können es in Betracht ziehen, diese Attribute auch für Ihre eigenen benutzerdefinierten angefügten Eigenschaften anzuwenden. Der Zweck und die Syntax von .NET Framework-Attribute sind auf den entsprechenden Verweisseiten beschrieben:

  • Weitere Informationen zum Erstellen einer angefügten Eigenschaft finden Sie unter Gewusst wie: Registrieren einer angefügten Eigenschaft.

  • Weitergehende Nutzungsszenarios für Abhängigkeitseigenschaften und angefügte Eigenschaften finden Sie unter Benutzerdefinierte Abhängigkeitseigenschaften.

  • Sie können eine Eigenschaft auch als angefügte Eigenschaft und als Abhängigkeitseigenschaft registrieren, dann jedoch trotzdem Wrapperimplementierungen offenlegen. In diesem Fall kann der Eigenschaft entweder auf dieses Element festgelegt werden, oder für jedes Element von XAML Syntax der angefügten Eigenschaft an. Ein Beispiel für eine Eigenschaft mit einem entsprechenden Szenario für die standardmäßige und die angefügte Nutzung ist FrameworkElement.FlowDirection.

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft