diff --git a/src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/StaticResourceExtension.cs b/src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/StaticResourceExtension.cs
index 1d3afee96c..44c4af5338 100644
--- a/src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/StaticResourceExtension.cs
+++ b/src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/StaticResourceExtension.cs
@@ -4,6 +4,7 @@
using System;
using System.ComponentModel;
using Avalonia.Controls;
+using Avalonia.Styling;
using Portable.Xaml;
using Portable.Xaml.ComponentModel;
using Portable.Xaml.Markup;
@@ -33,7 +34,14 @@ namespace Avalonia.Markup.Xaml.MarkupExtensions
foreach (IResourceProvider resourceProvider in resourceProviders)
{
- if (resourceProvider.TryGetResource(ResourceKey, out var value))
+ if (resourceProvider is IControl control && control.StylingParent != null)
+ {
+ // If we've got to a control that has a StylingParent then it's probably
+ // a top level control and its StylingParent is pointing to the global
+ // styles. If this is case just do a FindResource on it.
+ return control.FindResource(ResourceKey);
+ }
+ else if (resourceProvider.TryGetResource(ResourceKey, out var value))
{
return value;
}
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StaticResourceTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StaticResourceTests.cs
index a89f11a173..10532ab6c0 100644
--- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StaticResourceTests.cs
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StaticResourceTests.cs
@@ -59,6 +59,28 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
Assert.Equal(0xff506070, brush.Color.ToUint32());
}
+ [Fact]
+ public void StaticResource_From_Application_Can_Be_Assigned_To_Property_In_Window()
+ {
+ using (StyledWindowNoTheme())
+ {
+ Application.Current.Resources.Add("brush", new SolidColorBrush(0xff506070));
+
+ var xaml = @"
+
+
+";
+
+ var loader = new AvaloniaXamlLoader();
+ var window = (Window)loader.Load(xaml);
+ var border = window.FindControl("border");
+
+ var brush = (SolidColorBrush)border.Background;
+ Assert.Equal(0xff506070, brush.Color.ToUint32());
+ }
+ }
+
[Fact]
public void StaticResource_Can_Be_Assigned_To_Setter()
{