Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
- undArrangeOverride
-Methoden stellen implementierungsspezifisches Verhalten und Rendering-Informationen für das Layoutsystem bereit. WennAffectsArrange
,AffectsMeasure
oderAffectsRender
in den Metadaten einer Abhängigkeitseigenschaft auftrue
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önnenIsNotDataBindable
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 nurtrue
für bestimmte Abhängigkeitseigenschaften, z. B. SelectedIndex. Benutzereingabesteuerelemente sollten dasJournal
Kennzeichen für Eigenschaften festlegen, deren Werte Benutzerauswahlen enthalten, die gespeichert werden müssen. DasJournal
-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:
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 SieFrameworkPropertyMetadata
dann mithilfe eines Konstruktors, der einenFrameworkPropertyMetadataOptions
Parameter enthält, und übergeben Sie dieFrameworkPropertyMetadataOptions
Instanz. Um Metadatenkennzeichnungen nach der ÜbergabeFrameworkPropertyMetadataOptions
an den FrameworkPropertyMetadata Konstruktor zu ändern, ändern Sie die entsprechende Eigenschaft für die neueFrameworkPropertyMetadata
Instanz. Wenn Sie zum Beispiel die FrameworkPropertyMetadataOptions.NotDataBindable Kennzeichnung festlegen, können Sie dies rückgängig machen, indem Sie FrameworkPropertyMetadata.IsNotDataBindable anstelle vonfalse
setzen.Instanziieren Sie
FrameworkPropertyMetadata
mithilfe eines Konstruktors, der keinenFrameworkPropertyMetadataOptions
-Parameter enthält, und legen Sie dann die entsprechenden Boolean-Flags aufFrameworkPropertyMetadata
fest. Legen Sie Flagwerte fest, bevor Sie IhreFrameworkPropertyMetadata
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 FlagInherits
festgelegt ist, stammt der Standardwert vom nächstgelegenen Vorgänger, derDefaultValue
in den Metadaten angegeben hat.Bei einem CoerceValueCallback, der neue Wert ersetzt einen vorhandenen
CoerceValueCallback
Wert. Wenn Sie in den Überschreibungsmetadaten keinCoerceValueCallback
angeben, kommt der Wert vom nächstgelegenen Vorgänger in der Vererbungskette, der einCoerceValueCallback
angegeben hat.Bei
FrameworkPropertyMetadata
nicht geerbten Flags können Sie den Standardwertfalse
mit einemtrue
Wert überschreiben. Sie können jedoch nur einentrue
Wert mit einemfalse
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
.NET Desktop feedback