Browse Source

Fix faulty resource lookup.

pull/1136/head
Steven Kirk 9 years ago
parent
commit
bf2d403f14
  1. 2
      src/Avalonia.Controls/Application.cs
  2. 5
      src/Avalonia.Controls/Control.cs
  3. 4
      src/Avalonia.Controls/ControlExtensions.cs
  4. 37
      tests/Avalonia.Controls.UnitTests/ControlTests_Resources.cs

2
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);
}

5
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);
}
/// <summary>

4
src/Avalonia.Controls/ControlExtensions.cs

@ -86,7 +86,7 @@ namespace Avalonia.Controls
/// </summary>
/// <param name="control">The control.</param>
/// <param name="key">The resource key.</param>
/// <returns>The resource, or null if not found.</returns>
/// <returns>The resource, or <see cref="AvaloniaProperty.UnsetValue"/> if not found.</returns>
public static object FindResource(this IControl control, string key)
{
Contract.Requires<ArgumentNullException>(control != null);
@ -107,7 +107,7 @@ namespace Avalonia.Controls
current = current.StylingParent;
}
return null;
return AvaloniaProperty.UnsetValue;
}
/// <summary>

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

Loading…
Cancel
Save