一、查看逻辑树
1、主要使用LogicalTreeHelper.GetChildren()方法获取逻辑树;
2、通过递归的方式获取整棵逻辑树;
示例代码:
public string GetLogicTree(FrameworkElement container, StringBuilder str, int num)
{
str.Append(' ', num);
num += 3;
string name = container.Name;
if (string.IsNullOrWhiteSpace(name))
{
name = $"{container.GetType().Name}";
}
str.AppendLine($"{name}");
foreach (var child in LogicalTreeHelper.GetChildren(container))
{
FrameworkElement element = child as FrameworkElement;
if (element != null)
{
GetLogicTree(element, str, num);
}
}
return str.ToString();
}
二、获取视觉树
1、先使用VisualTreeHelper.GetChildrenCount()方法获取视觉树孩子数量;
2、再通过VisualTreeHelper.GetChild()方法获取各级子树;
3、最后通过递归获取整棵视觉树;
示例代码:
public string GetVisualTree(FrameworkElement element, StringBuilder sb, int num)
{
sb.Append(' ', num);
num+= 3;
string name = element.Name;
if (string.IsNullOrWhiteSpace(name))
{
name= element.GetType().Name;
}
sb.AppendLine(name);
int count=VisualTreeHelper.GetChildrenCount(element);
for (int i = 0; i < count; i++)
{
FrameworkElement ele=VisualTreeHelper.GetChild(element, i) as FrameworkElement;
if (ele != null)
{
GetVisualTree(ele, sb, num);
}
}
return sb.ToString();
}
三、结果展示
示例代码:
public string GetAllTree(FrameworkElement ele)
{
StringBuilder sb = new StringBuilder();
int num = 0;
sb.AppendLine("------------Logic Tree------------");
GetLogicTree(ele, sb, num);
sb.AppendLine();
sb.AppendLine("------------Visual Tree------------");
//num = 0;
GetVisualTree(ele,sb, num);
return sb.ToString();
}
结果展示: