diff --git a/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs b/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs
index 96d78b5092..d5114244cf 100644
--- a/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs
+++ b/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs
@@ -311,8 +311,35 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers
_selectors.Add(node);
}
- //TODO: actually find the type
- public override IXamlIlType TargetType => _selectors.FirstOrDefault()?.TargetType;
+ public override IXamlIlType TargetType
+ {
+ get
+ {
+ IXamlIlType result = null;
+
+ foreach (var selector in _selectors)
+ {
+ if (selector.TargetType == null)
+ {
+ return null;
+ }
+ else if (result == null)
+ {
+ result = selector.TargetType;
+ }
+ else
+ {
+ while (!result.IsAssignableFrom(selector.TargetType))
+ {
+ result = result.BaseType;
+ }
+ }
+ }
+
+ return result;
+ }
+ }
+
protected override void DoEmit(XamlIlEmitContext context, IXamlIlEmitter codeGen)
{
if (_selectors.Count == 0)
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs
index 95c5ac89e4..02f0d7072c 100644
--- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs
@@ -316,24 +316,24 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
-
-
-
+
+
";
var loader = new AvaloniaXamlLoader();
var window = (Window)loader.Load(xaml);
- var border = window.FindControl("border");
- var canvas = window.FindControl