Primary WinUI APIs:
Primary Avalonia APIs:
GetVisualParent, GetVisualChildren, FindDescendantOfType)GetLogicalParent, GetLogicalChildren, GetLogicalAncestors)| WinUI idiom | Avalonia idiom |
|---|---|
visual tree traversal via VisualTreeHelper |
visual tree traversal via VisualExtensions |
parent traversal from FrameworkElement.Parent |
logical parent traversal via GetLogicalParent |
GetTemplateChild("PART_...") |
TemplateAppliedEventArgs.NameScope.Find<T>("PART_...") |
| template parent semantics | TemplatedParent |
WinUI XAML:
<ControlTemplate TargetType="local:StatusChip">
<Border x:Name="PART_Indicator" />
</ControlTemplate>
WinUI C#:
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
_indicator = GetTemplateChild("PART_Indicator") as Border;
var visualParent = VisualTreeHelper.GetParent(this);
var logicalParent = Parent;
}
Avalonia XAML:
<ControlTheme TargetType="local:StatusChip">
<Setter Property="Template">
<ControlTemplate>
<Border x:Name="PART_Indicator" />
</ControlTemplate>
</Setter>
</ControlTheme>
Avalonia C#:
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
{
base.OnApplyTemplate(e);
_indicator = e.NameScope.Find<Border>("PART_Indicator");
var visualParent = this.GetVisualParent();
var logicalParent = this.GetLogicalParent();
var templatedParent = TemplatedParent;
}
NameScope-based lookup inside OnApplyTemplate.