From 5801756763e7e27abeaf098aebccfc1610dec636 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Mon, 22 Apr 2019 14:03:15 +0300 Subject: [PATCH] Fixed target type resolve for control templates with direct parent --- ...iaXamlIlControlTemplateTargetTypeMetadataTransformer.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer.cs b/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer.cs index d2eb9a5b66..cd09b536f6 100644 --- a/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer.cs +++ b/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer.cs @@ -21,6 +21,8 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers IXamlIlAstTypeReference targetType; + var templatableBaseType = context.Configuration.TypeSystem.GetType("Avalonia.Controls.Control"); + if ((tt?.Values.FirstOrDefault() is XamlIlTypeExtensionNode tn)) { targetType = tn.Type; @@ -31,9 +33,12 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers .FirstOrDefault(); if (parentScope?.Type == AvaloniaXamlIlTargetTypeMetadataNode.ScopeType.Style) targetType = parentScope.TargetType; + else if (context.ParentNodes().Skip(1).FirstOrDefault() is XamlIlAstObjectNode directParentNode + && templatableBaseType.IsAssignableFrom(directParentNode.Type.GetClrType())) + targetType = directParentNode.Type; else targetType = new XamlIlAstClrTypeReference(node, - context.Configuration.TypeSystem.GetType("Avalonia.Controls.Control"), false); + templatableBaseType, false); }