diff --git a/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj b/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj
index 0e234939cb..e14fd7eb8d 100644
--- a/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj
+++ b/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj
@@ -60,6 +60,7 @@
+
diff --git a/Perspex.Controls.UnitTests/TemplatedControlTests.cs b/Perspex.Controls.UnitTests/TemplatedControlTests.cs
index bb60e46d11..f4fdee5883 100644
--- a/Perspex.Controls.UnitTests/TemplatedControlTests.cs
+++ b/Perspex.Controls.UnitTests/TemplatedControlTests.cs
@@ -4,6 +4,7 @@
//
// -----------------------------------------------------------------------
+using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Perspex.Controls.UnitTests
{
using System;
@@ -96,5 +97,22 @@ namespace Perspex.Controls.UnitTests
Assert.AreEqual(target, templateResult.TemplatedParent);
}
+
+ [TestMethod]
+ public void OnTemplateApplied_Is_Called()
+ {
+ var target = new TestTemplatedControl
+ {
+ Template = new ControlTemplate(_ =>
+ {
+ return new Control();
+ })
+ };
+
+ var children = ((IVisual)target).VisualChildren.ToArray();
+
+ Assert.IsTrue(target.OnTemplateAppliedCalled);
+ }
}
}
+
diff --git a/Perspex.Controls.UnitTests/TestTemplatedControl.cs b/Perspex.Controls.UnitTests/TestTemplatedControl.cs
new file mode 100644
index 0000000000..a019396a69
--- /dev/null
+++ b/Perspex.Controls.UnitTests/TestTemplatedControl.cs
@@ -0,0 +1,23 @@
+// -----------------------------------------------------------------------
+//
+// Copyright 2014 MIT Licence. See licence.md for more information.
+//
+// -----------------------------------------------------------------------
+
+namespace Perspex.Controls.UnitTests
+{
+ using System;
+ using Moq;
+ using Perspex.Layout;
+ using Perspex.Rendering;
+
+ internal class TestTemplatedControl : TemplatedControl
+ {
+ public bool OnTemplateAppliedCalled { get; private set; }
+
+ protected override void OnTemplateApplied()
+ {
+ this.OnTemplateAppliedCalled = true;
+ }
+ }
+}
diff --git a/Perspex.Controls/ContentPresenter.cs b/Perspex.Controls/ContentPresenter.cs
index 6185df26ef..c852efb0ed 100644
--- a/Perspex.Controls/ContentPresenter.cs
+++ b/Perspex.Controls/ContentPresenter.cs
@@ -32,7 +32,7 @@ namespace Perspex.Controls
set { this.SetValue(ContentProperty, value); }
}
- protected override IEnumerable CreateVisualChildren()
+ protected override void CreateVisualChildren()
{
object content = this.Content;
@@ -62,11 +62,7 @@ namespace Perspex.Controls
}
result.TemplatedParent = null;
- return Enumerable.Repeat(result, 1);
- }
- else
- {
- return Enumerable.Empty();
+ this.AddVisualChild(result);
}
}
@@ -142,9 +138,8 @@ namespace Perspex.Controls
private void ContentChanged(Tuple