Browse Source

Get Appplication.Resources from StaticResource.

pull/1136/head
Steven Kirk 9 years ago
parent
commit
fe3c5d0290
  1. 10
      src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/StaticResourceExtension.cs
  2. 22
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StaticResourceTests.cs

10
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;
}

22
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 = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
<Border Name='border' Background='{StaticResource brush}'/>
</Window>";
var loader = new AvaloniaXamlLoader();
var window = (Window)loader.Load(xaml);
var border = window.FindControl<Border>("border");
var brush = (SolidColorBrush)border.Background;
Assert.Equal(0xff506070, brush.Color.ToUint32());
}
}
[Fact]
public void StaticResource_Can_Be_Assigned_To_Setter()
{

Loading…
Cancel
Save