5-WPFTemplates-And-CustomEl.../5-17.1理解逻辑树和可视化树/VisualTreeDisplayWindow.xam...

40 lines
1.0 KiB
C#

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace _5_WPF模板和自定义元素;
public partial class VisualTreeDisplayWindow : Window
{
public VisualTreeDisplayWindow()
{
InitializeComponent();
}
public void ShowVisualTree(DependencyObject element)
{
// 清除树
TreeViewElement.Items.Clear();
// 递归添加元素及其子元素
ProcessElement(element, null);
}
private void ProcessElement(DependencyObject element, TreeViewItem? previousItem)
{
var item = new TreeViewItem
{
Header = element.GetType().Name,
IsExpanded = true
};
// 检查跟节点,如果不为空添加子节点
if (previousItem == null)
TreeViewElement.Items.Add(item);
else
previousItem.Items.Add(item);
for (var i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
ProcessElement(VisualTreeHelper.GetChild(element, i), item);
}
}