<Window x:Class="WpfApp94.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp94"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Grid.Column="0"
Content="Logical Tree"
Click="Button_Click"/>
<Button Grid.Column="1"
Content="Visual Tree"
Click="Button_Click_1"/>
<ListBox Grid.Row="1"
Grid.Column="0"
x:Name="logicalTree"/>
<ListBox Grid.Row="1"
Grid.Column="1"
x:Name="visualTree"/>
</Grid>
</Window>
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.Navigation;
using System.Windows.Shapes;
namespace WpfApp94
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
PrintLogicalTree(this);
}
public void PrintLogicalTree(object obj)
{
try
{
if (!(obj is DependencyObject))
{
return;
}
foreach (object child in LogicalTreeHelper.GetChildren((DependencyObject)obj))
{
if (child != null)
{
logicalTree.Items.Add(child.GetType().Name);
Console.WriteLine(child.GetType().Name);
PrintLogicalTree(child);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public void PrintVisualTree(DependencyObject parent)
{
for(int i=0;i<VisualTreeHelper.GetChildrenCount(parent);i++)
{
var child=VisualTreeHelper.GetChild(parent,i);
if(child!=null)
{
visualTree.Items.Add(child.GetType().Name);
PrintVisualTree(child);
}
}
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
PrintVisualTree(this);
}
}
}
![]()