diff --git a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj
index 2b7f6263a7..cf24f2ec18 100644
--- a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj
+++ b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj
@@ -4,6 +4,7 @@
Library
CS0067
true
+ latest
diff --git a/tests/Avalonia.Styling.UnitTests/StyleTests.cs b/tests/Avalonia.Styling.UnitTests/StyleTests.cs
index a6bbe63cd0..70de9603e8 100644
--- a/tests/Avalonia.Styling.UnitTests/StyleTests.cs
+++ b/tests/Avalonia.Styling.UnitTests/StyleTests.cs
@@ -218,6 +218,204 @@ namespace Avalonia.Styling.UnitTests
Assert.Equal(new[] { "foodefault", "Bar" }, values);
}
+ [Fact]
+ public void Inactive_Values_Should_Not_Be_Made_Active_During_Style_Attach()
+ {
+ using var app = UnitTestApplication.Start(TestServices.RealStyler);
+
+ var root = new TestRoot
+ {
+ Styles =
+ {
+ new Style(x => x.OfType())
+ {
+ Setters =
+ {
+ new Setter(Class1.FooProperty, "Foo"),
+ },
+ },
+
+ new Style(x => x.OfType())
+ {
+ Setters =
+ {
+ new Setter(Class1.FooProperty, "Bar"),
+ },
+ }
+ }
+ };
+
+ var values = new List();
+ var target = new Class1();
+
+ target.GetObservable(Class1.FooProperty).Subscribe(x => values.Add(x));
+ root.Child = target;
+
+ Assert.Equal(new[] { "foodefault", "Bar" }, values);
+ }
+
+ [Fact]
+ public void Inactive_Bindings_Should_Not_Be_Made_Active_During_Style_Attach()
+ {
+ using var app = UnitTestApplication.Start(TestServices.RealStyler);
+
+ var root = new TestRoot
+ {
+ Styles =
+ {
+ new Style(x => x.OfType())
+ {
+ Setters =
+ {
+ new Setter(Class1.FooProperty, new Binding("Foo")),
+ },
+ },
+
+ new Style(x => x.OfType())
+ {
+ Setters =
+ {
+ new Setter(Class1.FooProperty, new Binding("Bar")),
+ },
+ }
+ }
+ };
+
+ var values = new List();
+ var target = new Class1
+ {
+ DataContext = new
+ {
+ Foo = "Foo",
+ Bar = "Bar",
+ }
+ };
+
+ target.GetObservable(Class1.FooProperty).Subscribe(x => values.Add(x));
+ root.Child = target;
+
+ Assert.Equal(new[] { "foodefault", "Bar" }, values);
+ }
+
+ [Fact]
+ public void Inactive_Values_Should_Not_Be_Made_Active_During_Style_Detach()
+ {
+ using var app = UnitTestApplication.Start(TestServices.RealStyler);
+
+ var root = new TestRoot
+ {
+ Styles =
+ {
+ new Style(x => x.OfType())
+ {
+ Setters =
+ {
+ new Setter(Class1.FooProperty, "Foo"),
+ },
+ },
+
+ new Style(x => x.OfType())
+ {
+ Setters =
+ {
+ new Setter(Class1.FooProperty, "Bar"),
+ },
+ }
+ }
+ };
+
+ var target = new Class1();
+ root.Child = target;
+
+ var values = new List();
+ target.GetObservable(Class1.FooProperty).Subscribe(x => values.Add(x));
+ root.Child = null;
+
+ Assert.Equal(new[] { "Bar", "foodefault" }, values);
+ }
+
+ [Fact]
+ public void Inactive_Values_Should_Not_Be_Made_Active_During_Style_Detach_2()
+ {
+ using var app = UnitTestApplication.Start(TestServices.RealStyler);
+
+ var root = new TestRoot
+ {
+ Styles =
+ {
+ new Style(x => x.OfType().Class("foo"))
+ {
+ Setters =
+ {
+ new Setter(Class1.FooProperty, "Foo"),
+ },
+ },
+
+ new Style(x => x.OfType())
+ {
+ Setters =
+ {
+ new Setter(Class1.FooProperty, "Bar"),
+ },
+ }
+ }
+ };
+
+ var target = new Class1 { Classes = { "foo" } };
+ root.Child = target;
+
+ var values = new List();
+ target.GetObservable(Class1.FooProperty).Subscribe(x => values.Add(x));
+ root.Child = null;
+
+ Assert.Equal(new[] { "Foo", "foodefault" }, values);
+ }
+
+ [Fact]
+ public void Inactive_Bindings_Should_Not_Be_Made_Active_During_Style_Detach()
+ {
+ using var app = UnitTestApplication.Start(TestServices.RealStyler);
+
+ var root = new TestRoot
+ {
+ Styles =
+ {
+ new Style(x => x.OfType())
+ {
+ Setters =
+ {
+ new Setter(Class1.FooProperty, new Binding("Foo")),
+ },
+ },
+
+ new Style(x => x.OfType())
+ {
+ Setters =
+ {
+ new Setter(Class1.FooProperty, new Binding("Bar")),
+ },
+ }
+ }
+ };
+
+ var target = new Class1
+ {
+ DataContext = new
+ {
+ Foo = "Foo",
+ Bar = "Bar",
+ }
+ };
+
+ root.Child = target;
+
+ var values = new List();
+ target.GetObservable(Class1.FooProperty).Subscribe(x => values.Add(x));
+ root.Child = null;
+
+ Assert.Equal(new[] { "Bar", "foodefault" }, values);
+ }
+
[Fact]
public void Template_In_Non_Matching_Style_Is_Not_Built()
{