A cross-platform UI framework for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

71 lines
2.1 KiB

// -----------------------------------------------------------------------
// <copyright file="Debug.cs" company="Steven Kirk">
// Copyright 2014 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Diagnostics
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Perspex.Controls;
public static class Debug
{
public static string PrintVisualTree(IVisual visual)
{
StringBuilder result = new StringBuilder();
PrintVisualTree(visual, result, 0);
return result.ToString();
}
private static void PrintVisualTree(IVisual visual, StringBuilder builder, int indent)
{
Control control = visual as Control;
builder.Append(Indent(indent - 1));
if (indent > 0)
{
builder.Append(" +- ");
}
builder.Append(visual.GetType().Name);
if (control != null)
{
builder.Append(" ");
builder.AppendLine(control.Classes.ToString());
foreach (var value in control.GetSetValues())
{
builder.Append(Indent(indent));
builder.Append(" | ");
builder.Append(value.Item1.Name);
builder.Append(" = ");
builder.Append(value.Item2 ?? "(null)");
builder.Append(" [");
builder.Append(value.Item3);
builder.AppendLine("]");
}
}
else
{
builder.AppendLine();
}
foreach (var child in visual.VisualChildren)
{
PrintVisualTree(child, builder, indent + 1);
}
}
private static string Indent(int indent)
{
return string.Join("", Enumerable.Repeat(" ", Math.Max(indent, 0)));
}
}
}