Metadaten für AbhängigkeitseigenschaftenDependency Property Metadata

Das Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) -Eigenschaften System enthält ein metadatenberichterstattungs System, das über die Berichte hinausgeht, die über Reflektion oder allgemeine Common Language Runtime (CLR)-Eigenschaften gemeldet werden können.The Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) property system includes a metadata reporting system that goes beyond what can be reported about a property through reflection or general common language runtime (CLR) characteristics. Metadaten für eine Abhängigkeitseigenschaft können auch eindeutig durch die Klasse zugewiesen werden, die eine Abhängigkeitseigenschaft definiert, sie können geändert werden, wenn die Abhängigkeitseigenschaft zu einer anderen Klasse hinzugefügt wird, und sie können gezielt von allen abgeleiteten Klassen überschrieben werden, die die Abhängigkeitseigenschaft von der definierenden Basisklasse erben.Metadata for a dependency property can also be assigned uniquely by the class that defines a dependency property, can be changed when the dependency property is added to a different class, and can be specifically overridden by all derived classes that inherit the dependency property from the defining base class.

Erforderliche KomponentenPrerequisites

Dieses Thema setzt voraus, dass Sie Abhängigkeitseigenschaften vorhandener Abhängigkeitseigenschaften von Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)-Klassen aus Sicht eines Kunden verstehen und die Übersicht über Abhängigkeitseigenschaften gelesen haben.This topic assumes that you understand dependency properties from the perspective of a consumer of existing dependency properties on Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) classes, and have read the Dependency Properties Overview. Um den Beispielen in diesem Thema folgen zu können, sollten Sie zudem mit XAMLXAML vertraut sein und wissen, wie Sie WPFWPF-Anwendungen schreiben.In order to follow the examples in this topic, you should also understand XAMLXAML and know how to write WPFWPF applications.

So werden Metadaten für Abhängigkeitseigenschaften genutztHow Dependency Property Metadata is Used

Metadaten für Abhängigkeitseigenschaften sind ein Objekt vorhanden, das zur Untersuchung der Eigenschaften einer Abhängigkeitseigenschaft abgefragt werden kann.Dependency property metadata exists as an object that can be queried to examine the characteristics of a dependency property. Auch das Eigenschaftensystem greift häufig auf diese Metadaten zu, da es alle Abhängigkeitseigenschaften verarbeitet.This metadata is also accessed frequently by the property system as it processes any given dependency property. Das Metadatenobjekt für eine Abhängigkeitseigenschaft kann die folgenden Informationstypen enthalten:The metadata object for a dependency property can contain the following types of information:

  • Den Standardwert für die Abhängigkeitseigenschaft, wenn über den lokalen Wert, den Stil, die Vererbung usw. kein anderer Wert für die Abhängigkeitseigenschaft bestimmt werden kann. Ausführliche Informationen dazu, wie sich Standardwerte auf die vom Eigenschaftensystem beim Zuordnen von Werten zu Abhängigkeitseigenschaften verwendeten Rangfolge von Eigenschaftenwerten auswirken, finden Sie unter Priorität von Abhängigkeitseigenschaftswerten.Default value for the dependency property, if no other value can be determined for the dependency property by local value, style, inheritance, etc. For a thorough discussion of how default values participate in the precedence used by the property system when assigning values for dependency properties, see Dependency Property Value Precedence.

  • Verweise auf die Rückrufimplementierungen, die das Umwandlungs- oder Änderungsbenachrichtigungsverhalten pro Besitzertyp beeinflussen.References to callback implementations that affect coercion or change-notification behaviors on a per-owner-type basis. Beachten Sie, dass diese Rückrufe häufig auf nicht öffentlicher Zugriffsebene definiert werden. Die tatsächlichen Verweise aus den Metadaten zu erhalten, ist im Allgemeinen nicht möglich, wenn die Verweise sich nicht innerhalb Ihres zulässigen Zugriffsbereichs befinden.Note that these callbacks are often defined with a nonpublic access level, so obtaining the actual references from metadata is generally not possible unless the references are within your permitted access scope. Weitere Informationen zu Abhängigkeitseigenschaftenrückrufen finden Sie unter Rückrufe und Validierung von Abhängigkeitseigenschaften.For more information on dependency property callbacks, see Dependency Property Callbacks and Validation.

  • Wenn die fragliche Abhängigkeitseigenschaft eine Eigenschaft auf WPF-Frameworkebene ist, enthalten die Metadaten möglicherweise Merkmale der Abhängigkeitseigenschaft auf WPF-Frameworkebene, die Informationen und Zustände von Diensten wie der WPF-Framework-Layout-Engine und Eigenschaftsvererbungslogik melden.If the dependency property in question is considered to be a WPF framework-level property, the metadata might contain WPF framework-level dependency property characteristics, which report information and state for services such as the WPF framework-level layout engine and property inheritance logic. Weitere Informationen zu diesem Aspekt der Metadaten für Abhängigkeitseigenschaften finden Sie unter Framework-Eigenschaftenmetadaten.For more information on this aspect of dependency property metadata, see Framework Property Metadata.

Metadaten-APIsMetadata APIs

Der Typ, der die meisten Metadateninformationen meldet, die vom Eigenschaften System verwendet PropertyMetadata werden, ist die-Klasse.The type that reports most of the metadata information used by the property system is the PropertyMetadata class. Metadateninstanzen werden optional angegeben, wenn Abhängigkeitseigenschaften im Eigenschaftensystem registriert werden, und können erneut für zusätzliche Typen angegeben werden, die sich selbst entweder als Besitzer hinzufügen oder Metadaten überschreiben, die sie von der Basisklasse der Definition der Abhängigkeitseigenschaften erben.Metadata instances are optionally specified when dependency properties are registered with the property system, and can be specified again for additional types that either add themselves as owners or override metadata they inherit from the base class dependency property definition. (In Fällen, in denen eine Eigenschaften Registrierung keine Metadaten angibt, wird PropertyMetadata ein Standardwert mit Standardwerten für diese Klasse erstellt.) Die registrierten Metadaten werden als PropertyMetadata zurückgegeben, wenn Sie die verschiedenen GetMetadata über Ladungen abrufen, die Metadaten von einer Abhängigkeits DependencyObject Eigenschaft für eine-Instanz abrufen.(For cases where a property registration does not specify metadata, a default PropertyMetadata is created with default values for that class.)The registered metadata is returned as PropertyMetadata when you call the various GetMetadata overloads that get metadata from a dependency property on a DependencyObject instance.

Die PropertyMetadata -Klasse wird dann von abgeleitet, um spezifischere Metadaten für Architektur Bereiche wie die Klassen der WPF-Frameworkebene bereitzustellen.The PropertyMetadata class is then derived from to provide more specific metadata for architectural divisions such as the WPF framework-level classes. UIPropertyMetadataFügt Animations Berichte hinzu und FrameworkPropertyMetadata stellt die Eigenschaften der WPF-Frameworkebene bereit, die im vorherigen Abschnitt erwähnt wurden.UIPropertyMetadata adds animation reporting, and FrameworkPropertyMetadata provides the WPF framework-level properties mentioned in the previous section. Wenn Abhängigkeits Eigenschaften registriert werden, können Sie mit diesen PropertyMetadata abgeleiteten Klassen registriert werden.When dependency properties are registered, they can be registered with these PropertyMetadata derived classes. Wenn die Metadaten untersucht werden, kann PropertyMetadata der Basistyp potenziell in die abgeleiteten Klassen umgewandelt werden, sodass Sie die spezifischeren Eigenschaften überprüfen können.When the metadata is examined, the base PropertyMetadata type can potentially be cast to the derived classes so that you can examine the more specific properties.

Hinweis

Die Eigenschafts Merkmale, die in FrameworkPropertyMetadata angegeben werden können, werden in dieser Dokumentation manchmal als "Flags" bezeichnet.The property characteristics that can be specified in FrameworkPropertyMetadata are sometimes referred to in this documentation as "flags". Wenn Sie neue Metadateninstanzen für die Verwendung in Registrierungen von Abhängigkeits Eigenschaften oder Metadatenüberschreibungen erstellen, geben Sie diese Werte FrameworkPropertyMetadataOptions mithilfe der flagweise-Enumeration an, und geben Sie dann möglicherweise verketteten Werte der-Enumeration an die FrameworkPropertyMetadata -Konstruktor.When you create new metadata instances for use in dependency property registrations or metadata overrides, you specify these values using the flagwise enumeration FrameworkPropertyMetadataOptions and then you supply possibly concatenated values of the enumeration to the FrameworkPropertyMetadata constructor. Nachdem Sie jedoch erstellt wurden, werden diese Options Merkmale innerhalb FrameworkPropertyMetadata von als eine Reihe von booleschen Eigenschaften und nicht im erstellenden Enumerationswert verfügbar gemacht.However, once constructed, these option characteristics are exposed within a FrameworkPropertyMetadata as a series of Boolean properties rather than the constructing enumeration value. Mit den booleschen Eigenschaften können Sie jede Bedingung überprüfen, anstatt eine Maske auf einen Flag-Enumerationswert anzuwenden, um die interessanten Informationen abzurufen.The Boolean properties enable you to check each conditional, rather than requiring you to apply a mask to a flagwise enumeration value to get the information you are interested in. Der Konstruktor verwendet die verketteten FrameworkPropertyMetadataOptions , um die Länge der Konstruktorsignatur zu gewährleisten, wohingegen die tatsächlich erstellten Metadaten die diskreten Eigenschaften verfügbar machen, um die Abfrage der Metadaten intuitiver zu gestalten.The constructor uses the concatenated FrameworkPropertyMetadataOptions in order to keep the length of the constructor signature reasonable, whereas the actual constructed metadata exposes the discrete properties to make querying the metadata more intuitive.

Überschreiben von Metadaten und Ableiten einer KlasseWhen to Override Metadata, When to Derive a Class

Das WPFWPF-Eigenschaftensystem verfügt über Funktionen zum Ändern einiger Merkmale von Abhängigkeitseigenschaften, ohne dass sie vollständig neu implementiert werden müssen.The WPFWPF property system has established capabilities for changing some characteristics of dependency properties without requiring them to be entirely re-implemented. Dies geschieht durch das Erstellen einer anderen Instanz von Metadaten für die Abhängigkeitseigenschaft, wie sie auf einem bestimmten Typ vorhanden ist.This is accomplished by constructing a different instance of property metadata for the dependency property as it exists on a particular type. Beachten Sie, dass die meisten vorhandenen Abhängigkeitseigenschaften keine virtuellen Eigenschaften sind. Ihre „Neuimplementierung“ in geerbten Klassen könnte also nur das Shadowing des vorhandenen Elements erreicht werden.Note that most existing dependency properties are not virtual properties, so strictly speaking "re-implementing" them on inherited classes could only be accomplished by shadowing the existing member.

Wenn das Szenario, das Sie für eine Abhängigkeitseigenschaft auf einem Typ umsetzen möchten, durch eine Änderung der Eigenschaften vorhandener Abhängigkeitseigenschaften nicht erreicht werden kann, müssen Sie möglicherweise eine abgeleitete Klasse erstellen und dann auf die abgeleitete Klasse eine benutzerdefinierte Abhängigkeitseigenschaft deklarieren.If the scenario you are trying to enable for a dependency property on a type cannot be accomplished by modifying characteristics of existing dependency properties, it might then be necessary to create a derived class, and then to declare a custom dependency property on your derived class. Eine benutzerdefinierte Abhängigkeits Eigenschaft verhält sich identisch mit den Abhängigkeits WPFWPF Eigenschaften, die von den APIs definiert werden.A custom dependency property behaves identically to dependency properties defined by the WPFWPF APIs. Weitere Informationen zu benutzerdefinierten Abhängigkeitseigenschaften finden Sie unter Benutzerdefinierte Abhängigkeitseigenschaften.For more details about custom dependency properties, see Custom Dependency Properties.

Ein wichtiges Merkmal einer Abhängigkeitseigenschaft, das überschrieben werden kann, ist der Werttyp.One notable characteristic of a dependency property that you cannot override is its value type. Wenn Sie eine Abhängigkeitseigenschaft erben, die ungefähr das erforderliche Verhalten, aber einen anderen Typ aufweist, müssen Sie eine benutzerdefinierte Abhängigkeitseigenschaft implementieren und die Eigenschaften möglicherweise über die Typkonvertierung oder eine andere Implementierung auf Ihrer Klasse verknüpfen.If you are inheriting a dependency property that has the approximate behavior you require, but you require a different type for it, you will have to implement a custom dependency property and perhaps link the properties through type conversion or other implementation on your custom class. Außerdem ist es nicht möglich, eine ValidateValueCallbackvorhandene zu ersetzen, da dieser Rückruf im Registrierungs Feld selbst und nicht innerhalb seiner Metadaten vorhanden ist.Also, you cannot replace an existing ValidateValueCallback, because this callback exists in the registration field itself and not within its metadata.

Szenarios zum Ändern vorhandener MetadatenScenarios for Changing Existing Metadata

Wenn Sie mit den Metadaten einer vorhandenen Abhängigkeitseigenschaft arbeiten, besteht ein häufiges Szenario für die Änderung der Metadaten der Abhängigkeitseigenschaft in der Änderung des Standardwerts.If you are working with metadata of an existing dependency property, one common scenario for changing dependency property metadata is to change the default value. Das Ändern oder Hinzufügen von Eigenschaftensystemrückrufen ist ein erweitertes Szenario.Changing or adding property system callbacks is a more advanced scenario. Wenn Ihre Implementierung einer abgeleiteten Klasse verschiedene Wechselbeziehungen zwischen Abhängigkeitseigenschaften aufweist, ist dieses Szenario möglicherweise hilfreich.You might want to do this if your implementation of a derived class has different interrelationships between dependency properties. Eine der Voraussetzungen eines Programmiermodells, das sowohl Code als auch deklarative Verwendung unterstützt, ist die Möglichkeit, Eigenschaften in einer beliebigen Reihenfolge festzulegen.One of the conditionals of having a programming model that supports both code and declarative usage is that properties must enable being set in any order. Daher müssen alle abhängigen Eigenschaften Just-In-Time ohne Kontext festgelegt werden und dürfen sich nicht auf die Kenntnis einer Festlegungsreihenfolge verlassen, wie z.B. in einem Konstruktor.Thus any dependent properties need to be set just-in-time without context and cannot rely on knowing a setting order such as might be found in a constructor. Weitere Informationen zu diesem Aspekt des Eigenschaftensystems finden Sie unter Rückrufe und Validierung von Abhängigkeitseigenschaften.For more information on this aspect of the property system, see Dependency Property Callbacks and Validation. Beachten Sie, dass Überprüfungsrückrufe kein Teil der Metadaten sind. Sie gehören zum Bezeichner der Abhängigkeitseigenschaft.Note that validation callbacks are not part of the metadata; they are part of the dependency property identifier. Aus diesem Grund können Überprüfungsrückrufe nicht durch das Überschreiben der Metadaten geändert werden.Therefore, validation callbacks cannot be changed by overriding the metadata.

In einigen Fällen möchten Sie möglicherweise auch die Eigenschaftenmetadatenoptionen auf WPF-Frameworkebene für vorhandene Abhängigkeitseigenschaften ändern.In some cases you might also want to alter the WPF framework-level property metadata options on existing dependency properties. Diese Optionen kommunizieren bestimmte bekannte Bedingungen zu Eigenschaften auf WPF-Frameworkebene an andere Prozesse auf WPF-Frameworkebene wie das Layoutsystem.These options communicate certain known conditionals about WPF framework-level properties to other WPF framework-level processes such as the layout system. Das Festlegen der Optionen erfolgt in der Regel nur, wenn eine neue Abhängigkeits Eigenschaft registriert wird. es ist jedoch auch möglich, die Eigenschaften Metadaten der WPF-Frameworkebene im Rahmen eines OverrideMetadata -oder AddOwner -Aufrufes zu ändernSetting the options is generally done only when registering a new dependency property, but it is also possible to change the WPF framework-level property metadata as part of a OverrideMetadata or AddOwner call. Die genauen Werte, die verwendet werden müssen, und weitere Informationen finden Sie unter Framework-Eigenschaftenmetadaten.For the specific values to use and more information, see Framework Property Metadata. Weitere Informationen zu Festlegung dieser Optionen für neu registrierte Abhängigkeitseigenschaften finden Sie unter Benutzerdefinierte Abhängigkeitseigenschaften.For more information that is pertinent to how these options should be set for a newly registered dependency property, see Custom Dependency Properties.

Überschreiben von MetadatenOverriding Metadata

Metadaten werden in erster Linie überschrieben, damit Sie die verschiedenen, von Metadaten abgeleiteten Verhaltensweisen ändern können, die auf die Abhängigkeitseigenschaft, so wie sie auf Ihrem Typ vorhanden ist, angewendet werden.The purpose of overriding metadata is primarily so that you have the opportunity to change the various metadata-derived behaviors that are applied to the dependency property as it exists on your type. Die Gründe hierfür werden ausführlicher im Abschnitt Metadaten erläutert.The reasons for this are explained in more detail in the Metadata section. Weitere Informationen und Codebeispiele finden Sie unter Überschreiben von Metadaten für eine Abhängigkeitseigenschaft.For more information including some code examples, see Override Metadata for a Dependency Property.

Eigenschafts Metadaten können während des Registrierungs Aufrufes (Register) für eine Abhängigkeits Eigenschaft bereitgestellt werden.Property metadata can be supplied for a dependency property during the registration call (Register). In vielen Fällen stellen Sie jedoch typspezifische Metadaten für Ihre Klasse bereit, wenn sie die Abhängigkeitseigenschaft erbt.However, in many cases, you might want to provide type-specific metadata for your class when it inherits that dependency property. Dies können Sie erreichen, indem Sie OverrideMetadata die-Methode aufrufen.You can do this by calling the OverrideMetadata method. Für ein Beispiel aus den WPFWPF -APIs ist FrameworkElement die-Klasse der Focusable Typ, der die Abhängigkeits Eigenschaft zuerst registriert.For an example from the WPFWPF APIs, the FrameworkElement class is the type that first registers the Focusable dependency property. Die Control -Klasse überschreibt jedoch Metadaten für die-Abhängigkeits Eigenschaft, um Ihren eigenen anfänglichen Standardwert bereit false zustellen true, wobei Sie von in geändert und andernfalls Focusable die ursprüngliche Implementierung wieder verwendet wird.But the Control class overrides metadata for the dependency property to provide its own initial default value, changing it from false to true, and otherwise re-uses the original Focusable implementation.

Wenn Sie Metadaten überschreiben, werden die verschiedenen Metadateneigenschaften entweder zusammengeführt oder ersetzt.When you override metadata, the different metadata characteristics are either merged or replaced.

  • PropertyChangedCallbackwird zusammengeführt.PropertyChangedCallback is merged. Wenn Sie einen neuen PropertyChangedCallbackhinzufügen, wird dieser Rückruf in den Metadaten gespeichert.If you add a new PropertyChangedCallback, that callback is stored in the metadata. Wenn Sie PropertyChangedCallback in der Überschreibung keine angeben, wird der Wert von PropertyChangedCallback als Verweis vom nächstgelegenen Vorgänger herauf gestuft, der ihn in den Metadaten angegeben hat.If you do not specify a PropertyChangedCallback in the override, the value of PropertyChangedCallback is promoted as a reference from the nearest ancestor that specified it in metadata.

  • Das tatsächliche Eigenschaften Systemverhalten für PropertyChangedCallback besteht darin, dass Implementierungen für alle metadatenbesitzer in der Hierarchie beibehalten und einer Tabelle hinzugefügt werden, wobei die Ausführungsreihenfolge des Eigenschaften Systems darin besteht, dass die Rückrufe der meisten abgeleiteten Klassen zuerst aufgerufen werden.The actual property system behavior for PropertyChangedCallback is that implementations for all metadata owners in the hierarchy are retained and added to a table, with order of execution by the property system being that the most derived class's callbacks are invoked first.

  • DefaultValuewird ersetzt.DefaultValue is replaced. Wenn Sie DefaultValue in der Überschreibung keine angeben, wird der Wert von DefaultValue vom nächstgelegenen Vorgänger, der ihn in den Metadaten angegeben hat, empfangen.If you do not specify a DefaultValue in the override, the value of DefaultValue comes from the nearest ancestor that specified it in metadata.

  • CoerceValueCallbackImplementierungen werden ersetzt.CoerceValueCallback implementations are replaced. Wenn Sie einen neuen CoerceValueCallbackhinzufügen, wird dieser Rückruf in den Metadaten gespeichert.If you add a new CoerceValueCallback, that callback is stored in the metadata. Wenn Sie CoerceValueCallback in der Überschreibung keine angeben, wird der Wert von CoerceValueCallback als Verweis vom nächstgelegenen Vorgänger herauf gestuft, der ihn in den Metadaten angegeben hat.If you do not specify a CoerceValueCallback in the override, the value of CoerceValueCallback is promoted as a reference from the nearest ancestor that specified it in metadata.

  • Das Verhalten des Eigenschaften Systems besteht darin, CoerceValueCallback dass nur das in den unmittelbaren Metadaten aufgerufen wird.The property system behavior is that only the CoerceValueCallback in the immediate metadata is invoked. Es werden keine Verweise CoerceValueCallback auf andere Implementierungen in der Hierarchie beibehalten.No references to other CoerceValueCallback implementations in the hierarchy are retained.

Dieses Verhalten wird von Mergeimplementiert und kann für abgeleitete Metadatenklassen überschrieben werden.This behavior is implemented by Merge, and can be overridden on derived metadata classes.

Überschreiben von Metadaten der angefügten EigenschaftOverriding Attached Property Metadata

Angefügte Eigenschaften werden in WPFWPF als Abhängigkeitseigenschaften implementiert.In WPFWPF, attached properties are implemented as dependency properties. Dies bedeutet, dass sie auch Metadaten besitzen, die von einzelnen Klassen überschrieben werden können.This means that they also have property metadata, which individual classes can override. Die Bereichs Überlegungen für eine angefügte Eigenschaft WPFWPF in sind im allgemeinen DependencyObject , dass für jede Eigenschaft eine angefügte Eigenschaft festgelegt werden kann.The scoping considerations for an attached property in WPFWPF are generally that any DependencyObject can have an attached property set on them. Daher kann jede DependencyObject abgeleitete Klasse die Metadaten für eine beliebige angefügte Eigenschaft überschreiben, da Sie möglicherweise für eine Instanz der Klasse festgelegt wird.Therefore, any DependencyObject derived class can override the metadata for any attached property, as it might be set on an instance of the class. Sie können Standardwerte, Rückrufe oder Eigenschaften der Berichterstattung über Merkmale auf WPF-Frameworkebene überschreiben.You can override default values, callbacks, or WPF framework-level characteristic-reporting properties. Wenn die angefügte Eigenschaft auf eine Instanz Ihrer Klasse festgelegt ist, finden diese Merkmale zum Überschreiben von Metadateneigenschaften Anwendung.If the attached property is set on an instance of your class, those override property metadata characteristics apply. Falls die Eigenschaft nicht anderweitig festgelegt ist, können Sie z.B. den Standardwert überschreiben, sodass der Überschreibungswert als der Wert der angefügten Eigenschaft auf Ihren Klasseninstanzen gemeldet wird.For instance, you can override the default value, such that your override value is reported as the value of the attached property on instances of your class, whenever the property is not otherwise set.

Hinweis

Die Inherits -Eigenschaft ist für angefügte Eigenschaften nicht relevant.The Inherits property is not relevant for attached properties.

Hinzufügen einer Klasse als Besitzer einer vorhandenen AbhängigkeitseigenschaftAdding a Class as an Owner of an Existing Dependency Property

Eine Klasse kann sich selbst als Besitzer einer Abhängigkeits Eigenschaft hinzufügen, die bereits registriert wurde, indem Sie AddOwner die-Methode verwendet.A class can add itself as an owner of a dependency property that has already been registered, by using the AddOwner method. Dadurch kann die Klasse eine Abhängigkeitseigenschaft verwenden, die ursprünglich für einen anderen Typ registriert wurde.This enables the class to use a dependency property that was originally registered for a different type. Die hinzugefügte Klasse ist in der Regel keine abgeleitete Klasse des Typs, der die Abhängigkeitseigenschaft zuerst als Besitzer registriert hat.The adding class is typically not a derived class of the type that first registered that dependency property as owner. Aus diesem Grund kann die Klasse und ihre abgeleiteten Klassen eine Implementierung von Abhängigkeitseigenschaften ohne die ursprüngliche Besitzerklasse „erben“, und ohne dass die hinzufügende Klasse der gleichen echten Klassenhierarchie angehört.Effectively, this allows your class and its derived classes to "inherit" a dependency property implementation without the original owner class and the adding class being in the same true class hierarchy. Darüber hinaus kann die hinzufügende Klasse (und auch alle abgeleiteten Klassen) typspezifische Metadaten für die ursprüngliche Abhängigkeitseigenschaft bereitstellen.In addition, the adding class (and all derived classes as well) can then provide type-specific metadata for the original dependency property.

Die hinzufügende Klasse sollte sich nicht nur über die Hilfsprogrammmethoden des Eigenschaftensystems als Besitzer hinzufügen, sondern auch weitere öffentliche Member für sich selbst deklarieren, um die Abhängigkeitseigenschaft in einen vollständigen Bestandteil des Eigenschaftensystems zu verwandeln, der für Code und Markup verfügbar ist.As well as adding itself as owner through the property system utility methods, the adding class should declare additional public members on itself in order to make the dependency property] a full participant in the property system with exposure to both code and markup. Eine Klasse, die eine vorhandene Abhängigkeitseigenschaft hinzufügt, hat beim Verfügbarmachen des Objektmodells für die Abhängigkeitseigenschaft die gleichen Aufgaben wie eine Klasse, die eine neue benutzerdefinierte Abhängigkeitseigenschaft definiert.A class that adds an existing dependency property has the same responsibilities as far as exposing the object model for that dependency property as does a class that defines a new custom dependency property. Der erste Member, der verfügbar gemacht wird, ist ein Bezeichnerfeld für die Abhängigkeitseigenschaft.The first such member to expose is a dependency property identifier field. Dieses Feld muss ein public static readonly Feld vom Typ DependencyPropertysein, das AddOwner dem Rückgabewert des Aufrufes zugewiesen wird.This field should be a public static readonly field of type DependencyProperty, which is assigned to the return value of the AddOwner call. Der zweite zu definierenden Member ist die "Wrapper"-Eigenschaft des Common Language Runtime (CLR).The second member to define is the common language runtime (CLR) "wrapper" property. Der Wrapper vereinfacht es, die Abhängigkeits Eigenschaft im Code zu manipulieren (Sie vermeiden die Aufrufe SetValue jedes Mal und können diesen Aufruf nur einmal im Wrapper selbst vornehmen).The wrapper makes it much more convenient to manipulate your dependency property in code (you avoid calls to SetValue each time, and can make that call only once in the wrapper itself). Der Wrapper wird genauso implementiert, wie dies auch beim Registrieren einer benutzerdefinierten Abhängigkeitseigenschaft der Fall wäre.The wrapper is implemented identically to how it would be implemented if you were registering a custom dependency property. Weitere Informationen zum Implementieren einer Abhängigkeitseigenschaft finden Sie unter Benutzerdefinierte Abhängigkeitseigenschaften und Hinzufügen eines Besitzertyps für eine Abhängigkeitseigenschaft.For more information about implementing a dependency property, see Custom Dependency Properties and Add an Owner Type for a Dependency Property.

AddOwner und angefügte EigenschaftenAddOwner and Attached Properties

Sie können AddOwner für eine Abhängigkeits Eigenschaft, die von der Owner-Klasse als angefügte Eigenschaft definiert ist, aufgerufen werden.You can call AddOwner for a dependency property that is defined as an attached property by the owner class. Der Zweck liegt im Allgemeinen darin, die zuvor angefügte Eigenschaft als nicht angefügte Abhängigkeitseigenschaft verfügbar zu machen.Generally the reason for doing this is to expose the previously attached property as a non-attached dependency property. Anschließend machen Sie den AddOwner Rückgabewert public static readonly als Feld zur Verwendung als Bezeichner für die Abhängigkeits Eigenschaft verfügbar und definieren entsprechende "Wrapper"-Eigenschaften, sodass die Eigenschaft in der Tabelle "Members" angezeigt wird und eine nicht angefügte Eigenschaft unterstützt. Verwendung in der-Klasse.You then will expose the AddOwner return value as a public static readonly field for use as the dependency property identifier, and will define appropriate "wrapper" properties so that the property appears in the members table and supports a non-attached property usage in your class.

Siehe auchSee also