diff --git a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs index d37cffc360..1a8a80329f 100644 --- a/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs +++ b/src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs @@ -209,8 +209,10 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers throw new XamlSelectorsTransformException("Unable to parse selector: " + e.Message, node, e); } + // Selectors should resolve control types only. + // isMarkupExtension = false to prevent resolving selector types to XExtension. var selector = Create(parsed, (p, n) - => TypeReferenceResolver.ResolveType(context, $"{p}:{n}", true, node, true)); + => TypeReferenceResolver.ResolveType(context, $"{p}:{n}", false, node, true)); pn.Values[0] = selector; var templateType = GetLastTemplateTypeFromSelector(selector); diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs index 54f80984ff..95d6cbca94 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs @@ -788,5 +788,25 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml Assert.Equal("Cannot add a Style without selector to a ControlTheme. Line 5, position 14.", exception.Message); } + + [Fact] + public void Selector_Should_Not_Resolve_To_MarkupExtension_Type() + { + using var _ = UnitTestApplication.Start(TestServices.StyledWindow); + + var style = (Style)AvaloniaRuntimeXamlLoader.Load( + $""" + + """); + + Assert.NotNull(style.Selector); + + var targetType = style.Selector.TargetType; + + Assert.NotEqual(typeof(TestSelectorControlExtension), targetType); + } } } diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/TestSelectorControl.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/TestSelectorControl.cs new file mode 100644 index 0000000000..a1cb89c002 --- /dev/null +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/TestSelectorControl.cs @@ -0,0 +1,5 @@ +namespace Avalonia.Markup.Xaml.UnitTests.Xaml; + +public class TestSelectorControl; + +public class TestSelectorControlExtension;