Mega Code Archive

 
Categories / C# / WPF
 

Logical Visual Tree Sample

<Window x:Class="WpfApplication1.Window1"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     Title="LogicalVisualTreeSample" Height="300" Width="300">   <WrapPanel Name="rootPanel">     <Button>_Click me</Button>   </WrapPanel> </Window> //File:Window.xaml.cs using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Diagnostics; namespace WpfApplication1 {   public partial class Window1 : System.Windows.Window {     public Window1() {       InitializeComponent();       DumpLogicalTree(rootPanel);     }     protected override void OnContentRendered(EventArgs e) {       base.OnContentRendered(e);       DumpVisualTree(rootPanel);     }     void DumpLogicalTree(object parent) {       string typeName = parent.GetType().Name;       string name = null;       DependencyObject doParent = parent as DependencyObject;       if( doParent != null ) {         name = (string)(doParent.GetValue(FrameworkElement.NameProperty) ?? "");       }       else {         name = parent.ToString();       }       Debug.WriteLine(typeName);       Console.WriteLine(name);       if( doParent == null ) { return; }       foreach( object child in LogicalTreeHelper.GetChildren(doParent) ) {         DumpLogicalTree(child);       }     }     void DumpVisualTree(DependencyObject parent) {       string typeName = parent.GetType().Name;       string name = (string)(parent.GetValue(FrameworkElement.NameProperty) ?? "");              Debug.WriteLine(typeName);       Console.WriteLine(name);       for( int i = 0; i != VisualTreeHelper.GetChildrenCount(parent); ++i ) {         DependencyObject child = VisualTreeHelper.GetChild(parent, i);         DumpVisualTree(child);       }     }   } }