Freigeben über


Framework-Eigenschaftsmetadaten

Sie können die Metadatenoptionen von Eigenschaften für Abhängigkeiten auf der Ebene des Windows Presentation Foundation (WPF)-Frameworks festlegen. Die Bezeichnung der WPF-Frameworkebene gilt, wenn WPF-Präsentations-APIs und ausführbare Dateien Rendering und Datenbindung verarbeiten. Präsentations-APIs und ausführbare Dateien führen eine Abfrage der FrameworkPropertyMetadata einer Abhängigkeitseigenschaft durch.

Voraussetzungen

In diesem Artikel wird davon ausgegangen, dass Sie über grundlegende Kenntnisse von Abhängigkeitseigenschaften verfügen und eine Übersicht über Abhängigkeitseigenschaften gelesen haben. Um den Beispielen in diesem Artikel zu folgen, hilft es Ihnen, wenn Sie mit Extensible Application Markup Language (XAML) vertraut sind und wissen, wie WPF-Anwendungen geschrieben werden.

Metadatenkategorien für Framework-Eigenschaften

FrameworkPropertyMetadata gehört zu diesen Kategorien.

  • Metadaten, die sich auf das Layout eines Elements auswirken, insbesondere die Metadaten-Flags AffectsArrange, AffectsMeasure und AffectsRender. Sie können diese Flags festlegen, wenn sich ihre Implementierung von Abhängigkeitseigenschaften auf einen visuellen Aspekt auswirkt, und Sie implementieren MeasureOverride oder ArrangeOverride in Ihrer Klasse. Die MeasureOverride- und ArrangeOverride-Methoden stellen implementierungsspezifisches Verhalten und Rendering-Informationen für das Layoutsystem bereit. Wenn AffectsArrange, AffectsMeasure oder AffectsRender in den Metadaten einer Abhängigkeitseigenschaft auf true festgelegt sind und sich der effektive Wert ändert, initiiert das WPF-Eigenschaftensystem eine Anforderung, um die visuellen Elemente des Elements ungültig zu machen und ein Neuzeichnen auszulösen.

  • Metadaten, die sich auf das Layout des übergeordneten Elements eines Elements auswirken, insbesondere die Metadaten-Kennzeichen AffectsParentArrange und AffectsParentMeasure. Beispiele für WPF-Abhängigkeitseigenschaften, die diese Flags festlegen, sind FixedPage.Left und Paragraph.KeepWithNext.

  • Eigenschaftenwert-Vererbungsmetadaten, insbesondere die Metadatenflags Inherits und OverridesInheritanceBehavior. Abhängigkeitseigenschaften erben standardmäßig keine Werte. OverridesInheritanceBehavior ermöglicht es dem Erbweg, auch in einen visuellen Baum zu gelangen, was für einige Steuerelement-Kompositionsszenarien erforderlich ist. Weitere Informationen finden Sie unter Eigenschaftswertvererbung.

    Hinweis

    Der Begriff "erbt" im Kontext von Eigenschaftswerten ist spezifisch für Abhängigkeitseigenschaften und bezieht sich nicht direkt auf verwaltete Typen im Code und die Membervererbung durch abgeleitete Typen. Im Kontext von Abhängigkeitseigenschaften bedeutet dies, dass untergeordnete Elemente Werte von Abhängigkeitseigenschaften von übergeordneten Elementen erben können.

  • Datenbindungsmetadaten, insbesondere die BindsTwoWayByDefault- und IsNotDataBindable-Metadatenflags. Standardmäßig unterstützen Abhängigkeitseigenschaften im WPF-Framework unidirektionale Bindung. Erwägen Sie das Festlegen der bidirektionalen Bindung als Standard für Eigenschaften, die den Status melden und durch Benutzeraktionen geändert werden können, z. B. IsSelected. Erwägen Sie außerdem, die bidirektionale Bindung als Standard festzulegen, wenn Benutzer eines Steuerelements davon ausgehen, dass eine Eigenschaft sie implementiert, z. B. "TextBox.Text". BindsTwoWayByDefault wirkt sich nur auf den Standardbindungsmodus aus. Um die Datenflussrichtung einer Bindung zu bearbeiten, legen Sie "Binding.Mode" fest. Sie können IsNotDataBindable verwenden, um die Datenbindung zu deaktivieren, wenn kein Anwendungsfall dafür besteht. Weitere Informationen zu Datenbindungen finden Sie in der Übersicht über die Datenbindung.

  • Journalmetadaten, insbesondere das Journal Metadaten-Flag. Der Standardwert des Journal-Flags ist nur true für bestimmte Abhängigkeitseigenschaften, z. B. SelectedIndex. Benutzereingabesteuerelemente sollten das Journal Kennzeichen für Eigenschaften festlegen, deren Werte Benutzerauswahlen enthalten, die gespeichert werden müssen. Das Journal-Flag wird von Anwendungen oder Diensten gelesen, die die Journalführung unterstützen, einschließlich der WPF-Journalführungsdienste. Informationen zum Speichern von Navigationsschritten finden Sie in der Navigationsübersicht

FrameworkPropertyMetadata wird direkt von UIPropertyMetadata abgeleitet und implementiert die hier erläuterten Flags. Sofern nicht ausdrücklich festgelegt, FrameworkPropertyMetadata weisen Flags einen Standardwert von false.

Lesen von FrameworkPropertyMetadata

Rufen Sie GetMetadata auf dem DependencyProperty Bezeichner auf, um Metadaten für eine Abhängigkeitseigenschaft abzurufen. Der GetMetadata Aufruf gibt ein PropertyMetadata Objekt zurück. Um Metadatenwerte des Frameworks abzufragen, müssen Sie PropertyMetadata in FrameworkPropertyMetadata umwandeln.

Festlegen von FrameworkPropertyMetadata

Wenn Sie eine Abhängigkeitseigenschaft registrieren, haben Sie die Möglichkeit, Metadaten zu erstellen und ihm zuzuweisen. Das Metadatenobjekt, das Sie zuweisen, kann PropertyMetadata oder eine der abgeleiteten Klassen wie FrameworkPropertyMetadata sein. Wählen Sie FrameworkPropertyMetadata für Abhängigkeitseigenschaften aus, die auf WPF-Präsentations-APIs und ausführbaren Dateien für das Rendern und die Datenbindung basieren. Eine fortgeschrittenere Option besteht darin, von FrameworkPropertyMetadata abzuleiten, um eine benutzerdefinierte Metadaten-Berichtsklasse mit mehr Flags zu erstellen. Oder Sie können UIPropertyMetadata für Nicht-Framework-Eigenschaften verwenden, die sich auf das Rendern der Benutzeroberfläche auswirken.

Obwohl Metadatenoptionen bei der Registrierung einer neuen Abhängigkeitseigenschaft in der Regel festgelegt werden, können Sie sie in OverrideMetadata oder AddOwner aufrufen erneut festlegen. Beim Überschreiben von Metadaten verwenden Sie immer denselben Metadatentyp, der während der Eigenschaftsregistrierung verwendet wurde.

Die Eigenschaften, die von FrameworkPropertyMetadata offengelegt werden, werden manchmal als Flags bezeichnet. Wenn Sie eine FrameworkPropertyMetadata Instanz erstellen, gibt es zwei Möglichkeiten zum Auffüllen von Flagwerten:

  1. Legen Sie die Flags für eine Instanz des FrameworkPropertyMetadataOptions Enumerationstyps fest. FrameworkPropertyMetadataOptions Mit dieser Option können Sie Metadatenkennzeichnungen in bitweiser ODER-Kombination angeben. Instanziieren Sie FrameworkPropertyMetadata dann mithilfe eines Konstruktors, der einen FrameworkPropertyMetadataOptions Parameter enthält, und übergeben Sie die FrameworkPropertyMetadataOptions Instanz. Um Metadatenkennzeichnungen nach der Übergabe FrameworkPropertyMetadataOptions an den FrameworkPropertyMetadata Konstruktor zu ändern, ändern Sie die entsprechende Eigenschaft für die neue FrameworkPropertyMetadata Instanz. Wenn Sie zum Beispiel die FrameworkPropertyMetadataOptions.NotDataBindable Kennzeichnung festlegen, können Sie dies rückgängig machen, indem Sie FrameworkPropertyMetadata.IsNotDataBindable anstelle von false setzen.

  2. Instanziieren Sie FrameworkPropertyMetadata mithilfe eines Konstruktors, der keinen FrameworkPropertyMetadataOptions-Parameter enthält, und legen Sie dann die entsprechenden Boolean-Flags auf FrameworkPropertyMetadata fest. Legen Sie Flagwerte fest, bevor Sie Ihre FrameworkPropertyMetadata Instanz einer Abhängigkeitseigenschaft zuordnen, andernfalls erhalten Sie eine InvalidOperationException.

Verhalten beim Außerkraftsetzen von Metadaten

Wenn Sie Framework-Eigenschaftsmetadaten außer Kraft setzen, werden geänderte Metadatenwerte entweder mit den ursprünglichen Werten ersetzt oder zusammengeführt.

  • Bei einem PropertyChangedCallback-Vorgang behält die Standard-Zusammenführungslogik frühere PropertyChangedCallback-Werte in einer Tabelle bei, und alle werden bei einer Eigenschaftsänderung aufgerufen. Die Rückrufreihenfolge wird durch die Klassentiefe bestimmt, bei der ein von der Basisklasse in der Hierarchie registrierter Rückruf zuerst ausgeführt wird. Geerbte Rückrufe werden nur einmal ausgeführt und gehören der Klasse, die sie zu Metadaten hinzugefügt hat.

  • Bei einem DefaultValueWert ersetzt der neue Wert den vorhandenen Standardwert. Wenn Sie keinen DefaultValue in den Überschreibungsmetadaten angeben und wenn das vorhandene FrameworkPropertyMetadata Flag Inherits festgelegt ist, stammt der Standardwert vom nächstgelegenen Vorgänger, der DefaultValue in den Metadaten angegeben hat.

  • Bei einem CoerceValueCallback, der neue Wert ersetzt einen vorhandenen CoerceValueCallback Wert. Wenn Sie in den Überschreibungsmetadaten kein CoerceValueCallback angeben, kommt der Wert vom nächstgelegenen Vorgänger in der Vererbungskette, der ein CoerceValueCallback angegeben hat.

  • Bei FrameworkPropertyMetadata nicht geerbten Flags können Sie den Standardwert false mit einem true Wert überschreiben. Sie können jedoch nur einen true Wert mit einem false Wert für Inherits, Journal, OverridesInheritanceBehavior und SubPropertiesDoNotAffectRender.

Hinweis

Die Standard-Zusammenführungslogik wird von der Merge-Methode implementiert. Sie können benutzerdefinierte Zusammenführungslogik in einer abgeleiteten Klasse angeben, die eine Abhängigkeitseigenschaft erbt, indem Sie Merge in dieser Klasse überschreiben.

Siehe auch