diff --git a/src/Avalonia.Controls/Primitives/TemplatedControl.cs b/src/Avalonia.Controls/Primitives/TemplatedControl.cs
index db029d38c0..a07dd9ae27 100644
--- a/src/Avalonia.Controls/Primitives/TemplatedControl.cs
+++ b/src/Avalonia.Controls/Primitives/TemplatedControl.cs
@@ -365,6 +365,17 @@ namespace Avalonia.Controls.Primitives
{
}
+ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
+ {
+ base.OnPropertyChanged(change);
+
+ if (change.Property == ThemeProperty)
+ {
+ foreach (var child in this.GetTemplateChildren())
+ child.InvalidateStyles();
+ }
+ }
+
///
/// Called when the control's template is applied.
///
diff --git a/tests/Avalonia.Base.UnitTests/Styling/StyledElementTests_Theming.cs b/tests/Avalonia.Base.UnitTests/Styling/StyledElementTests_Theming.cs
index 539f9e6576..0c0808987a 100644
--- a/tests/Avalonia.Base.UnitTests/Styling/StyledElementTests_Theming.cs
+++ b/tests/Avalonia.Base.UnitTests/Styling/StyledElementTests_Theming.cs
@@ -8,6 +8,8 @@ using Avalonia.UnitTests;
using Avalonia.VisualTree;
using Xunit;
+#nullable enable
+
namespace Avalonia.Base.UnitTests.Styling;
public class StyledElementTests_Theming
@@ -45,6 +47,40 @@ public class StyledElementTests_Theming
Assert.Null(target.Template);
}
+ [Fact]
+ public void Theme_Is_Detached_From_Template_Controls_When_Theme_Property_Cleared()
+ {
+ using var app = UnitTestApplication.Start(TestServices.RealStyler);
+
+ var theme = new ControlTheme
+ {
+ TargetType = typeof(ThemedControl),
+ Children =
+ {
+ new Style(x => x.Nesting().Template().OfType