in

Dé specialist in .NET trainingen en consultancy

Jo-wen Mei

Visual Tree vs Logical Tree (part II)

 

Ok, in deel I heb ik globaal uitgelegd wat deze 2 termen inhouden.

Tevens heb ik verteld hoe je door deze tree's kan lopen met de bijbehorende treehelpers.

Echter, voordat je in de boom klimt, zijn er een aantal dingen die je moet weten om er niet uit te vallen.

Hier een samenvatting met de rariteiten:

  • De visual tree bestaat uit elementen die nodig zijn om het uiteindelijke scherm tevoorschijn te toveren 

(gebruikt voor rendering, routed events, lokaliseren van resources, etc)

Alle afgeleide klassen van ContentElement kunnen in de ui voorkomen, maar zitten niet in de visual tree. WPF doet alsof ze er zijn om event routing te laten werken. VisualTreeHelper kan niet omgaan met ContentElement objecten omdat ContentElement geen afgeleide is van Visual or Visual3D!

  • De logical tree bestaat uit de achterliggende hierarchische structuur (lijkt op de definitie in de xaml)

(gebruikt voor dependency property value inheritance, resource resolution, etc)

Om te beginnen kan de logische tree objecten van elk type bevatten. (in tegenstelling tot de visual tree, die alleen instanties van DependencyObject heeft). Jammer genoeg kan de LogicalTreeHelper ook alleen omgaan met DependencyObject instanties.

Verder heeft een Window/Page/Control maar één visual tree, terwijl deze meerdere logical trees kan bevatten. Deze zijn niet met elkaar verbonden, dus je kan er ook niet met de LogicalTreeHelper tussen navigeren.

Hoe kunnen er meerdere logical trees bestaan?

Controls en data objecten hebben geen visuele weergave van zichzelf. Ze vertrouwen op templates die vertellen hoe ze gerendered moeten worden.

Zo'n template kan uitgebreid worden om echt zichtbare elementen te laten renderen.

De elementen die onderdeel zijn van de uitgebreide template, creeeren hun eigen logical tree, welke dus niet verbonden is met de logical tree van het object waar ze origineel voor gecreeerd zijn.

Meer info (en methodes om de hele tree te doorlopen)

Published feb 05 2008, 11:01 by Jo-wen
Filed under:

Comments

No Comments