diff --git a/src/Markup/Avalonia.Markup.Xaml/XamlIl/Runtime/XamlIlRuntimeHelpers.cs b/src/Markup/Avalonia.Markup.Xaml/XamlIl/Runtime/XamlIlRuntimeHelpers.cs index 747b21c679..1c2fa17643 100644 --- a/src/Markup/Avalonia.Markup.Xaml/XamlIl/Runtime/XamlIlRuntimeHelpers.cs +++ b/src/Markup/Avalonia.Markup.Xaml/XamlIl/Runtime/XamlIlRuntimeHelpers.cs @@ -19,9 +19,9 @@ namespace Avalonia.Markup.Xaml.XamlIl.Runtime var resourceNodes = provider.GetService().Parents .OfType().ToList(); var rootObject = provider.GetService().RootObject; + var parentScope = provider.GetService(); return sp => { - var parentScope = sp.GetService(); var scope = parentScope != null ? new ChildNameScope(parentScope) : (INameScope)new NameScope(); var obj = builder(new DeferredParentServiceProvider(sp, resourceNodes, rootObject, scope)); scope.Complete(); diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs index 5398e76f63..1f135f8e76 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs @@ -234,6 +234,38 @@ namespace Avalonia.Markup.Xaml.UnitTests Assert.Equal(100, XamlIlBugTestsStaticClassWithAttachedProperty.GetTestInt(tb)); } } + + [Fact] + public void DataTemplates_Should_Resolve_Named_Controls_From_Parent_Scope() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var parsed = (Window)AvaloniaXamlLoader.Parse(@" + + + + + + + + + + + +"); + parsed.DataContext = new List() {"Test"}; + parsed.Show(); + parsed.ApplyTemplate(); + var cc = ((ContentControl)((StackPanel)parsed.Content).Children.Last()); + cc.ApplyTemplate(); + var templated = cc.GetVisualDescendants().OfType() + .First(x => x.Classes.Contains("target")); + Assert.Equal("Test", templated.Text); + } + } } public class XamlIlBugTestsEventHandlerCodeBehind : Window