diff --git a/Perspex.UnitTests/Styling/SelectorTests_Descendent.cs b/Perspex.UnitTests/Styling/SelectorTests_Descendent.cs index 71faf8ec8c..dfac59daf8 100644 --- a/Perspex.UnitTests/Styling/SelectorTests_Descendent.cs +++ b/Perspex.UnitTests/Styling/SelectorTests_Descendent.cs @@ -24,7 +24,7 @@ namespace Perspex.UnitTests.Styling child.Setup(x => x.LogicalParent).Returns(parent.Object); - var selector = new Selector().OfType().Descendent().OfType(); + var selector = new Selector().OfType(parent.Object.GetType()).Descendent().OfType(child.Object.GetType()); Assert.IsTrue(ActivatorValue(selector, child.Object)); } @@ -39,7 +39,7 @@ namespace Perspex.UnitTests.Styling parent.Setup(x => x.LogicalParent).Returns(grandparent.Object); child.Setup(x => x.LogicalParent).Returns(parent.Object); - var selector = new Selector().OfType().Descendent().OfType(); + var selector = new Selector().OfType(grandparent.Object.GetType()).Descendent().OfType(child.Object.GetType()); Assert.IsTrue(ActivatorValue(selector, child.Object)); } @@ -56,7 +56,7 @@ namespace Perspex.UnitTests.Styling parent.Setup(x => x.Classes).Returns(new Classes()); child.Setup(x => x.LogicalParent).Returns(parent.Object); - var selector = new Selector().OfType().Class("foo").Descendent().OfType(); + var selector = new Selector().OfType(grandparent.Object.GetType()).Class("foo").Descendent().OfType(child.Object.GetType()); Assert.IsTrue(ActivatorValue(selector, child.Object)); } diff --git a/Perspex.UnitTests/Styling/SelectorTests_Template.cs b/Perspex.UnitTests/Styling/SelectorTests_Template.cs index 0c7878ea18..e123fa14d0 100644 --- a/Perspex.UnitTests/Styling/SelectorTests_Template.cs +++ b/Perspex.UnitTests/Styling/SelectorTests_Template.cs @@ -16,20 +16,6 @@ namespace Perspex.UnitTests.Styling [TestClass] public class SelectorTests_Template { - [TestMethod] - public void Control_In_Template_Is_Not_Matched_Without_Template_Selector() - { - var templatedControl = new Mock(); - var styleable = templatedControl.As(); - this.BuildVisualTree(templatedControl); - - var border = (Border)templatedControl.Object.VisualChildren.Single(); - - var selector = new Selector().OfType(); - - Assert.IsFalse(ActivatorValue(selector, border)); - } - [TestMethod] public void Control_In_Template_Is_Matched_With_Template_Selector() { @@ -66,7 +52,7 @@ namespace Perspex.UnitTests.Styling var border = (Border)templatedControl.Object.VisualChildren.Single(); - var selector = new Selector().OfType().Template().OfType(); + var selector = new Selector().OfType(templatedControl.Object.GetType()).Template().OfType(); Assert.IsTrue(ActivatorValue(selector,border)); } @@ -80,7 +66,7 @@ namespace Perspex.UnitTests.Styling templatedControl.Setup(x => x.Classes).Returns(new Classes("foo")); var border = (Border)templatedControl.Object.VisualChildren.Single(); - var selector = new Selector().OfType().Class("foo").Template().OfType(); + var selector = new Selector().OfType(templatedControl.Object.GetType()).Class("foo").Template().OfType(); Assert.IsTrue(ActivatorValue(selector, border)); } diff --git a/Perspex/Controls/Control.cs b/Perspex/Controls/Control.cs index dc26fe7b06..1d6f45c5b2 100644 --- a/Perspex/Controls/Control.cs +++ b/Perspex/Controls/Control.cs @@ -246,11 +246,14 @@ namespace Perspex.Controls } } - foreach (DataTemplate dt in Application.Current.DataTemplates.Reverse()) + if (Application.Current != null && Application.Current.DataTemplates != null) { - if (dt.Match(content)) + foreach (DataTemplate dt in Application.Current.DataTemplates.Reverse()) { - return dt; + if (dt.Match(content)) + { + return dt; + } } } diff --git a/Perspex/Styling/Selectors.cs b/Perspex/Styling/Selectors.cs index ed0a9e0685..a7e4e9ba48 100644 --- a/Perspex/Styling/Selectors.cs +++ b/Perspex/Styling/Selectors.cs @@ -76,6 +76,17 @@ namespace Perspex.Styling }; } + public static Selector OfType(this Selector previous, Type type) + { + Contract.Requires(previous != null); + + return new Selector(previous) + { + GetObservable = control => Observable.Return(control.GetType() == type), + SelectorString = type.Name, + }; + } + public static Selector Template(this Selector previous) { Contract.Requires(previous != null);