Skip to main content

Template inspection

Compare control templates for testing theme/style consistency.

using Avalonia.HeadlessTestingFramework;

// Compare templates of two controls
var result = TemplateComparer.CompareTemplates(expectedButton, actualButton);

if (!result.AreEqual)
{
foreach (var diff in result.Differences)
{
Console.WriteLine($"Template difference: {diff}");
}
}

// Get template info
var info = TemplateComparer.GetTemplateInfo(button);
Console.WriteLine($"Template target type: {info.TargetType}");
Console.WriteLine($"Part count: {info.PartCount}");
Console.WriteLine($"Visual count: {info.VisualCount}");
Console.WriteLine($"Tree depth: {info.TreeDepth}");

foreach (var part in info.Parts)
{
Console.WriteLine($" Part: {part.Name} ({part.Type?.Name})");
}

// Compare with custom options
var options = new TemplateComparisonOptions
{
CompareParts = true,
CompareStructure = true,
IgnoreParts = new() { "PART_Decorator" }
};

var result = TemplateComparer.CompareTemplates(expected, actual, options);

// Validate template has required parts
bool hasParts = TemplateComparer.HasTemplateParts(button,
"PART_ContentPresenter", "PART_Border");

// Missing parts declared as required by the control
var missing = TemplateComparer.GetMissingRequiredParts(button);
Console.WriteLine($"Has requested parts: {hasParts}");
Console.WriteLine($"Missing required parts: {string.Join(", ", missing)}");