diff --git a/src/Avalonia.Base/Styling/Style.cs b/src/Avalonia.Base/Styling/Style.cs
index 77c4e62d29..c61b08b2a1 100644
--- a/src/Avalonia.Base/Styling/Style.cs
+++ b/src/Avalonia.Base/Styling/Style.cs
@@ -7,6 +7,8 @@ namespace Avalonia.Styling
///
public class Style : StyleBase
{
+ private Selector? _selector;
+
///
/// Initializes a new instance of the class.
///
@@ -26,7 +28,11 @@ namespace Avalonia.Styling
///
/// Gets or sets the style's selector.
///
- public Selector? Selector { get; set; }
+ public Selector? Selector
+ {
+ get => _selector;
+ set => _selector = ValidateSelector(value);
+ }
public override SelectorMatchResult TryAttach(IStyleable target, object? host)
{
@@ -88,5 +94,13 @@ namespace Avalonia.Styling
base.SetParent(parent);
}
+
+ private static Selector? ValidateSelector(Selector? selector)
+ {
+ if (selector is TemplateSelector)
+ throw new InvalidOperationException(
+ "Invalid selector: Template selector must be followed by control selector.");
+ return selector;
+ }
}
}
diff --git a/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Nesting.cs b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Nesting.cs
index 747ad585e7..9048b488b6 100644
--- a/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Nesting.cs
+++ b/tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Nesting.cs
@@ -150,78 +150,6 @@ namespace Avalonia.Base.UnitTests.Styling
Assert.False(sink.Active);
}
- [Fact(Skip = "Template selectors a the end of nesting parent selectors currently broken")]
- public void Template_Nesting_OfType_Matches()
- {
- var control = new Control1 { Classes = { "foo" } };
- var button = new Button
- {
- Template = new FuncControlTemplate((x, _) => control),
- };
-
- button.ApplyTemplate();
-
- Style nested;
- var parent = new Style(x => x.OfType