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