diff --git a/src/Avalonia.Base/Styling/ControlTheme.cs b/src/Avalonia.Base/Styling/ControlTheme.cs
index 54fc972c31..9dcbd7d2c4 100644
--- a/src/Avalonia.Base/Styling/ControlTheme.cs
+++ b/src/Avalonia.Base/Styling/ControlTheme.cs
@@ -7,6 +7,17 @@ namespace Avalonia.Styling
///
public class ControlTheme : StyleBase
{
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ControlTheme() { }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The value for .
+ public ControlTheme(Type targetType) => TargetType = targetType;
+
///
/// Gets or sets the type for which this control theme is intended.
///
@@ -23,5 +34,10 @@ namespace Avalonia.Styling
SelectorMatch.AlwaysThisType :
SelectorMatch.NeverThisType;
}
+
+ internal override void SetParent(StyleBase? parent)
+ {
+ throw new InvalidOperationException("ControlThemes cannot be added as a nested style.");
+ }
}
}
diff --git a/tests/Avalonia.Base.UnitTests/Styling/ControlThemeTests.cs b/tests/Avalonia.Base.UnitTests/Styling/ControlThemeTests.cs
new file mode 100644
index 0000000000..93a0e6c2fd
--- /dev/null
+++ b/tests/Avalonia.Base.UnitTests/Styling/ControlThemeTests.cs
@@ -0,0 +1,28 @@
+using System;
+using Avalonia.Controls;
+using Avalonia.Styling;
+using Xunit;
+
+namespace Avalonia.Base.UnitTests.Styling
+{
+ public class ControlThemeTests
+ {
+ [Fact]
+ public void ControlTheme_Cannot_Be_Added_To_Style_Children()
+ {
+ var target = new ControlTheme(typeof(Button));
+ var style = new Style();
+
+ Assert.Throws(() => style.Children.Add(target));
+ }
+
+ [Fact]
+ public void ControlTheme_Cannot_Be_Added_To_ControlTheme_Children()
+ {
+ var target = new ControlTheme(typeof(Button));
+ var other = new ControlTheme(typeof(CheckBox));
+
+ Assert.Throws(() => other.Children.Add(target));
+ }
+ }
+}