From bf2d403f1459b67517ad03522c7593ca56350af9 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 22 Aug 2017 14:37:38 +0200 Subject: [PATCH] Fix faulty resource lookup. --- src/Avalonia.Controls/Application.cs | 2 +- src/Avalonia.Controls/Control.cs | 5 +-- src/Avalonia.Controls/ControlExtensions.cs | 4 +- .../ControlTests_Resources.cs | 37 ++++++++++++++++++- 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/Avalonia.Controls/Application.cs b/src/Avalonia.Controls/Application.cs index 1185fb5b20..4b7b7be900 100644 --- a/src/Avalonia.Controls/Application.cs +++ b/src/Avalonia.Controls/Application.cs @@ -153,7 +153,7 @@ namespace Avalonia bool IResourceProvider.TryGetResource(string key, out object value) { value = null; - return _resources?.TryGetResource(key, out value) ?? + return (_resources?.TryGetResource(key, out value) ?? false) || Styles.TryGetResource(key, out value); } diff --git a/src/Avalonia.Controls/Control.cs b/src/Avalonia.Controls/Control.cs index f72208e276..b9e5d1c609 100644 --- a/src/Avalonia.Controls/Control.cs +++ b/src/Avalonia.Controls/Control.cs @@ -428,9 +428,8 @@ namespace Avalonia.Controls bool IResourceProvider.TryGetResource(string key, out object value) { value = null; - return _resources?.TryGetResource(key, out value) ?? - _styles?.TryGetResource(key, out value) ?? - false; + return (_resources?.TryGetResource(key, out value) ?? false) || + (_styles?.TryGetResource(key, out value) ?? false); } /// diff --git a/src/Avalonia.Controls/ControlExtensions.cs b/src/Avalonia.Controls/ControlExtensions.cs index 8e29a5b447..87c774dfcf 100644 --- a/src/Avalonia.Controls/ControlExtensions.cs +++ b/src/Avalonia.Controls/ControlExtensions.cs @@ -86,7 +86,7 @@ namespace Avalonia.Controls /// /// The control. /// The resource key. - /// The resource, or null if not found. + /// The resource, or if not found. public static object FindResource(this IControl control, string key) { Contract.Requires(control != null); @@ -107,7 +107,7 @@ namespace Avalonia.Controls current = current.StylingParent; } - return null; + return AvaloniaProperty.UnsetValue; } /// diff --git a/tests/Avalonia.Controls.UnitTests/ControlTests_Resources.cs b/tests/Avalonia.Controls.UnitTests/ControlTests_Resources.cs index 361806c0a8..2f7017d52d 100644 --- a/tests/Avalonia.Controls.UnitTests/ControlTests_Resources.cs +++ b/tests/Avalonia.Controls.UnitTests/ControlTests_Resources.cs @@ -77,11 +77,46 @@ namespace Avalonia.Controls.UnitTests { "foo", "foo-value" }, } } - } + }, + Resources = + { + { "bar", "bar-value" }, + }, }; Assert.Equal("foo-value", target.FindResource("foo")); } + [Fact] + public void FindResource_Should_Find_Application_Style_Resource() + { + Control target; + + var app = new Application + { + Styles = + { + new Style + { + Resources = + { + { "foo", "foo-value" }, + }, + } + }, + Resources = + { + { "bar", "bar-value" }, + }, + }; + + var root = new TestRoot + { + Child = target = new Control(), + StylingParent = app, + }; + + Assert.Equal("foo-value", target.FindResource("foo")); + } } }