Metadaten für AbhängigkeitseigenschaftenDependency Property Metadata

Das Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)-Eigenschaftensystem enthält ein Metadatenberichtssystem, das die Berichtsmöglichkeiten mithilfe von Reflektion oder allgemeinen Common Language Runtime (CLR)common language runtime (CLR)-Merkmalen weit übertrifft.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)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

Ist der Typ, der meisten der vom Eigenschaftensystem verwendeten Metadateninformationen meldet die PropertyMetadata 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. (Für Fälle, die eine Registrierung, in denen keine Metadaten, der einen Standardwert gibt PropertyMetadata wird mit den Standardwerten für diese Klasse erstellt.) Die registrierte Metadaten werden zurückgegeben, als PropertyMetadata beim Aufrufen der verschiedenen GetMetadata Überladungen, die Metadaten von einer Abhängigkeitseigenschaft abrufen, auf eine DependencyObject Instanz.(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 abgeleitet, um spezifischere Metadaten für Architekturaspekte wie die WPF-Frameworkebene Klassen bereitstellen.The PropertyMetadata class is then derived from to provide more specific metadata for architectural divisions such as the WPF framework-level classes. UIPropertyMetadata Fügt animierte Berichterstattung, hinzu und FrameworkPropertyMetadata bietet die WPF-Frameworkebene-Eigenschaften, die im vorherigen Abschnitt erwähnt.UIPropertyMetadata adds animation reporting, and FrameworkPropertyMetadata provides the WPF framework-level properties mentioned in the previous section. Wenn Abhängigkeitseigenschaften registriert sind, können sie mit diesen registriert werden PropertyMetadata abgeleiteten Klassen.When dependency properties are registered, they can be registered with these PropertyMetadata derived classes. Wenn die Metadaten untersucht werden, wird die PropertyMetadata Typ kann potenziell in die abgeleiteten Klassen umgewandelt werden, damit Sie die spezifischeren Eigenschaften prü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 Eigenschaftenmerkmale, die in angegeben werden können FrameworkPropertyMetadata werden manchmal in dieser Dokumentation als "Flags" bezeichnet.The property characteristics that can be specified in FrameworkPropertyMetadata are sometimes referred to in this documentation as "flags". Beim Erstellen neuer Metadateninstanzen für die Verwendung in Abhängigkeit Eigenschaft Registrierungen oder Überschreiben von Metadaten, geben Sie diese Werte mithilfe der Flag-Enumeration FrameworkPropertyMetadataOptions und stellen Sie dann möglicherweise verkettete Werte der Enumeration der 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. Allerdings nach erstellt, diese werden offengelegt innerhalb einer FrameworkPropertyMetadata als eine Reihe von booleschen Eigenschaften anstelle der erstellende Enumerationswert.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 den verketteten FrameworkPropertyMetadataOptions um die Länge der Konstruktorsignatur sinnvoll zu begrenzen, während die eigentliche erstellte Metadaten die diskreten Eigenschaften zur Vereinfachung der Abfrage des Metadaten intuitiver macht.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ängigkeitseigenschaft verhält sich ebenso wie Abhängigkeitseigenschaften von definiert die WPFWPF APIs.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. Darüber hinaus kann nicht ersetzt eine vorhandene ValidateValueCallback, da dieser Rückruf im Registrierungsfeld selbst und nicht innerhalb der 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. Festlegen der Optionen erfolgt in der Regel nur, wenn Sie eine neue Abhängigkeitseigenschaft registrieren, aber es ist auch möglich, so ändern Sie die Eigenschaftenmetadaten für WPF-Frameworkebene als Teil einer OverrideMetadata oder AddOwner aufrufen.Setting 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.

Eigenschaftenmetadaten kann für eine Abhängigkeitseigenschaft während des Registrierungsaufrufs bereitgestellt werden (Register).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. Sie erreichen dies durch den Aufruf der OverrideMetadata Methode.You can do this by calling the OverrideMetadata method. Ein Beispiel von der WPFWPF -APIs, die FrameworkElement Klasse ist der Typ, der zuerst registriert die Focusable Abhängigkeitseigenschaft.For an example from the WPFWPF APIs, the FrameworkElement class is the type that first registers the Focusable dependency property. Aber die Control Klasse überschreibt die Metadaten für die Abhängigkeitseigenschaft, geben Sie eine eigene anfängliche-Wert, der Änderung von false zu true, und verwendet andernfalls die ursprüngliche Focusable Implementierung.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.

  • PropertyChangedCallback wird zusammengeführt.PropertyChangedCallback is merged. Wenn Sie ein neues hinzufügen PropertyChangedCallback, dieser Rückruf in den Metadaten gespeichert ist.If you add a new PropertyChangedCallback, that callback is stored in the metadata. Wenn Sie keinen angeben einer PropertyChangedCallback in der Überschreibung der Wert des PropertyChangedCallback wird höher gestuft, als Verweis vom nächsten Vorgänger, der Metadaten angegeben.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 Verhalten des tatsächlichen Eigenschaftensystems für PropertyChangedCallback besteht darin, dass die Implementierungen für alle Metadaten in der Hierarchie beibehalten und einer Tabelle mit der Reihenfolge der Ausführung vom Eigenschaftensystem hinzugefügt, dass die am stärksten abgeleitete Klasse zuerst aufgerufen wird.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.

  • DefaultValue wird ersetzt.DefaultValue is replaced. Wenn Sie keinen angeben einer DefaultValue in der Überschreibung der Wert des DefaultValue stammt aus der unmittelbaren Vorgänger, der Metadaten angegeben.If you do not specify a DefaultValue in the override, the value of DefaultValue comes from the nearest ancestor that specified it in metadata.

  • CoerceValueCallback -Implementierungen werden ersetzt.CoerceValueCallback implementations are replaced. Wenn Sie ein neues hinzufügen CoerceValueCallback, dieser Rückruf in den Metadaten gespeichert ist.If you add a new CoerceValueCallback, that callback is stored in the metadata. Wenn Sie keinen angeben einer CoerceValueCallback in der Überschreibung der Wert des CoerceValueCallback wird höher gestuft, als Verweis vom nächsten Vorgänger, der Metadaten angegeben.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.

  • Verhalten des Eigenschaftensystems ist, dass nur die CoerceValueCallback in den unmittelbaren Metadaten aufgerufen wird.The property system behavior is that only the CoerceValueCallback in the immediate metadata is invoked. Keine Verweise auf andere CoerceValueCallback Implementierungen in der Hierarchie werden beibehalten.No references to other CoerceValueCallback implementations in the hierarchy are retained.

Dieses Verhalten wird implementiert, indem Merge, 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 in WPFWPF sind in der Regel, die alle DependencyObject haben eine angefügte Eigenschaft festgelegt werden.The scoping considerations for an attached property in WPFWPF are generally that any DependencyObject can have an attached property set on them. Aus diesem Grund alle DependencyObject abgeleitete Klasse kann die Metadaten für eine angefügte Eigenschaft überschreiben, wie sie auf eine Instanz der Klasse festgelegt werden kann.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 nicht relevant für angefügte Eigenschaften.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ängigkeitseigenschaft, die bereits registriert wurde, mithilfe von Hinzufügen der AddOwner Methode.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 eine public static readonly -Feld des Typs DependencyProperty, die den Rückgabewert zugewiesen ist die AddOwner aufrufen.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 definierende Member ist die „Wrappereigenschaft“ der Common Language Runtime (CLR)common language runtime (CLR).The second member to define is the Common Language Runtime (CLR)common language runtime (CLR) "wrapper" property. Der Wrapper macht es wesentlich bequemer, bearbeiten Ihre Abhängigkeitseigenschaften im Code (Sie vermeiden, Aufrufe von SetValue jedes Mal, und müssen diesen Aufruf nur einmal im Wrapper selbst).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

Rufen Sie AddOwner für eine Abhängigkeitseigenschaft, die durch die Besitzerklasse als angefügte Eigenschaft definiert ist.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. Sie wird verfügbar machen die AddOwner Rückgabewert als ein public static readonly Feld für die Verwendung als Bezeichner der Abhängigkeitseigenschaft und entsprechenden Wrapper-Eigenschaften definieren, damit die Eigenschaft in der Membertabelle erscheint und nicht angefügte Eigenschaft unterstützt die Verwendung in Ihrer 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