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() {