Browse Source

Added new style resource test.

To get style resources working, OmniXaml #84 really needs to be set, so
style resource tests failing for the moment.
pull/464/head
Steven Kirk 10 years ago
parent
commit
0df95a81ae
  1. 38
      src/Markup/Perspex.Markup.Xaml/Data/StyleResourceBinding.cs
  2. 27
      tests/Perspex.Markup.Xaml.UnitTests/Xaml/StyleTests.cs

38
src/Markup/Perspex.Markup.Xaml/Data/StyleResourceBinding.cs

@ -5,6 +5,7 @@ using System;
using System.Reactive.Disposables;
using System.Reactive.Linq;
using System.Reactive.Subjects;
using Perspex.Controls;
using Perspex.Data;
using Perspex.Styling;
@ -38,18 +39,20 @@ namespace Perspex.Markup.Xaml.Data
PerspexProperty targetProperty,
IPerspexObject treeAnchor = null)
{
return new Subject(target, Name);
return new Subject(target, Name, treeAnchor);
}
private class Subject : ISubject<object>
{
private IPerspexObject _target;
private string _name;
private IPerspexObject _treeAnchor;
public Subject(IPerspexObject target, string name)
public Subject(IPerspexObject target, string name, IPerspexObject treeAnchor)
{
_target = target;
_name = name;
_treeAnchor = treeAnchor;
}
public void OnCompleted()
@ -66,24 +69,25 @@ namespace Perspex.Markup.Xaml.Data
public IDisposable Subscribe(IObserver<object> observer)
{
// HACK around OmniXAML issue #84.
var po = (PerspexObject)_target;
var parent = PerspexPropertyRegistry.Instance.FindRegistered(po, "Parent");
return po.GetObservable(parent)
.Where(x => x != PerspexProperty.UnsetValue && x != null)
.Take(1)
.Subscribe(_ =>
var host = (_target as IControl) ?? (_treeAnchor as IControl);
if (host != null)
{
var resource = host.FindStyleResource(_name);
if (resource != PerspexProperty.UnsetValue)
{
var resource = ((IStyleHost)_target).FindStyleResource(_name);
observer.OnNext(resource);
}
if (resource != PerspexProperty.UnsetValue)
{
observer.OnNext(resource);
}
observer.OnCompleted();
}
else
{
// TODO: Log error.
}
observer.OnCompleted();
});
return Disposable.Empty;
}
}
}

27
tests/Perspex.Markup.Xaml.UnitTests/Xaml/StyleTests.cs

@ -113,5 +113,32 @@ namespace Perspex.Markup.Xaml.UnitTests.Xaml
Assert.Equal(0xff506070, brush.Color.ToUint32());
}
}
[Fact]
public void StyleResource_Can_Be_Assigned_To_StyleResource_Property()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = @"
<Window xmlns='https://github.com/perspex'
xmlns:mut='https://github.com/perspex/mutable'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
<Window.Styles>
<Style>
<Style.Resources>
<Color x:Key='color'>#ff506070</Color>
<mut:SolidColorBrush x:Key='brush' Color='{StyleResource color}'/>
</Style.Resources>
</Style>
</Window.Styles>
</Window>";
var loader = new PerspexXamlLoader();
var window = (Window)loader.Load(xaml);
var brush = (Perspex.Media.Mutable.SolidColorBrush)window.FindStyleResource("brush");
Assert.Equal(0xff506070, brush.Color.ToUint32());
}
}
}
}

Loading…
Cancel
Save