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);
+ }
+ }
}
}