diff --git a/src/Avalonia.Styling/Styling/Setter.cs b/src/Avalonia.Styling/Styling/Setter.cs index 7f696a1f0a..d065b231ce 100644 --- a/src/Avalonia.Styling/Styling/Setter.cs +++ b/src/Avalonia.Styling/Styling/Setter.cs @@ -4,6 +4,7 @@ using System; using System.Reactive.Disposables; using System.Reactive.Subjects; +using System.Reflection; using Avalonia.Controls; using Avalonia.Data; using Avalonia.Metadata; @@ -98,8 +99,10 @@ namespace Avalonia.Styling if (binding == null) { var template = value as ITemplate; + bool isPropertyOfTypeITemplate = typeof(ITemplate).GetTypeInfo() + .IsAssignableFrom(Property.PropertyType.GetTypeInfo()); - if (template != null) + if (template != null && !isPropertyOfTypeITemplate) { var materialized = template.Build(); NameScope.SetNameScope((Visual)materialized, new NameScope()); diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs index b0451c951f..308a65dcd4 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs @@ -254,5 +254,36 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml Assert.Equal("Hello World!", ((TextBlock)target.Content).Text); } } + + [Fact] + public void Setter_Value_Is_Bound_Directly_If_The_Target_Type_Derives_From_ITemplate() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var xaml = @" + + + + + + +"; + + var loader = new AvaloniaXamlLoader(); + var window = (Window)loader.Load(xaml); + var target = window.Find("target"); + + Assert.NotNull(target.FocusAdorner); + } + } } }