<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); } } } }