40 lines
1.0 KiB
C#
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);
|
||
|
}
|
||
|
}
|