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"));
+ }
}
}