Klassenhierarchie WPF - Data Binding, Styles, Property-Vererbung

GinoBambino

Lt. Commander
Registriert
Sep. 2012
Beiträge
1.063
Im Buch "WPF - Das umfassende Handbuch" ist mir beim Betrachten der Klassenhierarchie soeben aufgefallen, dass es da etwas gibt, was nicht konsistent ist.

Laut dem Buch existiert folgende Hierarchie (zwei parallele Zweige):

DispatcherObject -> DependencyObject -> Visual -> UIElement -> FrameworkElement
DispatcherObject -> DependencyObject -> ContentElement -> FrameworkContentElement

FrameworkElement als auch FrameworkContentElement unterstützen DataBinding, Styles etc. Wenn jedoch beide Klasse dieselbe Logik enthalten, dann definieren sie sie entweder doppelt oder erben sie von einer allgemeinen Klasse.

Da die beiden Vererbungslinien parallel verlaufen, frage ich mich: Welche soll das sein? Wird im Buch etwas nicht ganz richtig angezeigt?
 
Die Hierarchie im Buch ist korrekt. Auf der offiziellen Dokumentation für ContentElement findet sich noch dieser Hinweis:
ContentElement weist viele derselben APIs wie UIElement auf.Diese gemeinsamen APIs stammen nicht aus einer gemeinsamen Klassenvererbung.Sie weisen jedoch eine gemeinsamen Namensgebung, ein ähnliches Verhalten und ähnliche interne Implementierungen der APIs in jeder Klasse auf.Der Grund für die Ähnlichkeit ist, dass ContentElement und UIElement Klassen sind, die eine Elementbasis bilden. Allerdings wurde das jeweilige Verhalten des Markupobjektmodells unterschiedlich konzipiert.

Insbesondere gilt Folgendes: UIElement stammt von Visual ab, das die Grafikunterstützung auf niedriger Ebene zum Rendern eines ContentElement in einem rechteckigen Bereich eines zusammengesetzten Fensters bietet. ContentElement hingegen verzögert das Rendering, sodass Konzepte einfacher unterstützt werden können, die sich eher an Dokumenten orientieren, z. B. Fluss und Umbruch.Diese zwei verwandten Klassen implementieren auch die gemeinsamen Schnittstellen IInputElement und IAnimatable.
 
Hey, super. Das hast du sehr gut recherchiert.

Hätte ich ja nicht gedacht, dass das so ist :)
 
Zurück
Oben