<Window x:Class="WPFTrees.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WPFTrees" Height="304" Width="702" Name="MyWindow"> <DockPanel Name="DockPanel1"> <StackPanel DockPanel.Dock="Left" Margin="6,4,4,4" > <Canvas Name="canvas1"> <Button Name="button1"> <Ellipse Name="ellipse1" Height="100" Width="100" Fill="Red"></Ellipse> </Button> </Canvas> </StackPanel> <Button DockPanel.Dock="Left" Height="20" Width="100" HorizontalAlignment="Left" Margin="1,4,4,4" Click="buttonPrint_Click">Print Trees</Button> </DockPanel> </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.Collections; namespace WPFTrees { public partial class Window1 : System.Windows.Window { public Window1() { InitializeComponent(); } public void PrintLogicalTree(Object obj) { if (obj is FrameworkElement) { FrameworkElement element = (FrameworkElement)obj; Console.WriteLine(element.GetType().ToString()); IEnumerable children = LogicalTreeHelper.GetChildren(element); foreach (Object child in children) { PrintLogicalTree(child); } } } private void buttonPrint_Click(Object sender, RoutedEventArgs e) { PrintLogicalTree(this.button1); } } }