Ich kenne den grundlegenden Unterschied zwischen diesen Klassen, dass PropertyMetadata beim Sichern der Eigenschaft, UIPropertyMetadata für die Unterstützung von Animationen und FrameworkMetadata für Framework-Eigenschaften für Benutzersteuerelemente verwendet wird.
Aber ich verstehe nur den theoretischen Teil. Es wird eine große Hilfe sein, wenn Sie bitte ein einfaches Beispiel erklären, das all diese 3 Klassen in 3 verschiedenen Abhängigkeitseigenschaften verwendet, die sie deutlich unterscheiden.
Vielen Dank im Voraus.
Quelle: PropertyMetadata vs. FrameworkPropertyMetadata
Wenn Sie eine benutzerdefinierte Abhängigkeitseigenschaft implementieren / a> und Sie registrieren die Eigenschaft, indem Sie
DependencyProperty.Register
aufrufen. Sie geben einige Metadaten für die Eigenschaft an, indem Sie ihr eine Instanz vonPropertyMetadata
übergeben. Dies kann eine Instanz der KlassePropertyMetadata
oder eine Instanz einer ihrer Unterklassen sein. Die Unterschiede sind unten gezeigt.
PropertyMetadata
- Grundlegende Metadaten zu Abhängigkeitseigenschaften
CoerceValueCallback
- erzwinge den Wert beim SetzenDefaultValue
- ein Standardwert für die EigenschaftPropertyChangedCallback
- reagiert auf neuen effektiven Wert für die Eigenschaft
UIPropertyMetadata
- leitet sich vonPropertyMetadata
ab und fügt Folgendes hinzu:
IsAnimationProhibited
- Animationen für diese Eigenschaft deaktivieren?
FrameworkPropertyMetadata
- leitet sich vonUIPropertyMetadata
ab und fügt Folgendes hinzu:
AffectsArrange
,AffectsMeasure
,AffectsParentArrange
,AffectsParentMeasure
,AffectsRender
- Sollen Layoutberechnungen nach Eigenschaftswertänderungen erneut ausgeführt werden?BindsTwoWayByDefault
,DefaultUpdateSourceTrigger
,IsDataBindingAllowed
,IsNotDataBindable
- Gibt an, wie die Eigenschaft an der Datenbindung teilnimmtInherits
,OverridesInheritanceBehavior
- Funktioniert Vererbung für diese Eigenschaft?Journal
- Speichern Sie diesen Wert beim Journaling?SubPropertiesDoNotAffectRender
- Überprüfen Sie die Eigenschaften dieses Objekts, wenn sich das Layout ändert?
Ein wichtiger praktischer Unterschied zwischen PropertyMetadata und FrameworkPropertyMetadata besteht darin, dass letzteres erlaubt, eine Menge von FrameworkPropertyMetadataOptions .
Zum Beispiel sorgt das Angeben von FrameworkPropertyMetadataOptions.AffectsRender
für das Initiieren eines erneuten Renderings eines UIElement, für das die Eigenschaft geändert wurde. Ohne dieses Flag müssten Sie das manuell in einem PropertyChangedCallback tun.
Tags und Links wpf