VisualTreeDisplay.axaml代码
<Window xmlns="https://github.com/avaloniaui" 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" Height="620" Width="480" x:Class="AvaloniaUI.VisualTreeDisplay" Title="VisualTreeDisplay"> <TreeView Name="treeElements" Margin="10"></TreeView> </Window>
VisualTreeDisplay.axaml.cs代码
using Avalonia;
using Avalonia.Controls;
using Avalonia.VisualTree;
namespace AvaloniaUI;
public partial class VisualTreeDisplay : Window
{
public VisualTreeDisplay()
{
InitializeComponent();
// 当窗口完全加载后,显示自身的可视树
this.Opened += (_, _) => ShowVisualTree(this);
}
public void ShowVisualTree(Visual element)
{
treeElements.Items.Clear();
ProcessElement(element, null);
}
private void ProcessElement(Visual element, TreeViewItem? parent)
{
// 构造标题:类型 + 控件名(如果有)
string? name = (element as Control)?.Name;
string header = string.IsNullOrEmpty(name)
? element.GetType().Name
: $"{element.GetType().Name} ({name})";
var item = new TreeViewItem
{
Header = header,
IsExpanded = true, // 默认全部展开
Tag = element // 可选:保存引用以供后续扩展
};
if (parent == null)
treeElements.Items.Add(item);
else
parent.Items.Add(item);
// 遍历可视子节点
foreach (var child in element.GetVisualChildren())
{
if (child is Visual v)
ProcessElement(v, item);
}
}
}
运行效果

浙公网安备 33010602011771号