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,AffectsMeasureoderAffectsRenderin den Metadaten einer Abhängigkeitseigenschaft auftruefestgelegt 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".
BindsTwoWayByDefaultwirkt sich nur auf den Standardbindungsmodus aus. Um die Datenflussrichtung einer Bindung zu bearbeiten, legen Sie "Binding.Mode" fest. Sie könnenIsNotDataBindableverwenden, 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 nurtruefür bestimmte Abhängigkeitseigenschaften, z. B. SelectedIndex. Benutzereingabesteuerelemente sollten dasJournalKennzeichen 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.
FrameworkPropertyMetadataOptionsMit dieser Option können Sie Metadatenkennzeichnungen in bitweiser ODER-Kombination angeben. Instanziieren SieFrameworkPropertyMetadatadann mithilfe eines Konstruktors, der einenFrameworkPropertyMetadataOptionsParameter enthält, und übergeben Sie dieFrameworkPropertyMetadataOptionsInstanz. Um Metadatenkennzeichnungen nach der ÜbergabeFrameworkPropertyMetadataOptionsan den FrameworkPropertyMetadata Konstruktor zu ändern, ändern Sie die entsprechende Eigenschaft für die neueFrameworkPropertyMetadataInstanz. Wenn Sie zum Beispiel die FrameworkPropertyMetadataOptions.NotDataBindable Kennzeichnung festlegen, können Sie dies rückgängig machen, indem Sie FrameworkPropertyMetadata.IsNotDataBindable anstelle vonfalsesetzen.Instanziieren Sie
FrameworkPropertyMetadatamithilfe eines Konstruktors, der keinenFrameworkPropertyMetadataOptions-Parameter enthält, und legen Sie dann die entsprechenden Boolean-Flags aufFrameworkPropertyMetadatafest. Legen Sie Flagwerte fest, bevor Sie IhreFrameworkPropertyMetadataInstanz 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
DefaultValuein den Überschreibungsmetadaten angeben und wenn das vorhandene FrameworkPropertyMetadata FlagInheritsfestgelegt ist, stammt der Standardwert vom nächstgelegenen Vorgänger, derDefaultValuein den Metadaten angegeben hat.Bei einem CoerceValueCallback, der neue Wert ersetzt einen vorhandenen
CoerceValueCallbackWert. Wenn Sie in den Überschreibungsmetadaten keinCoerceValueCallbackangeben, kommt der Wert vom nächstgelegenen Vorgänger in der Vererbungskette, der einCoerceValueCallbackangegeben hat.Bei
FrameworkPropertyMetadatanicht geerbten Flags können Sie den Standardwertfalsemit einemtrueWert überschreiben. Sie können jedoch nur einentrueWert mit einemfalseWert 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