// -----------------------------------------------------------------------
//
// Copyright 2014 MIT Licence. See licence.md for more information.
//
// -----------------------------------------------------------------------
namespace Perspex.Controls
{
using System;
using System.Linq;
using Perspex.Controls;
public class ControlTemplate
{
private Func build;
public ControlTemplate(Func build)
{
Contract.Requires(build != null);
this.build = build;
}
public Control Build(ITemplatedControl templatedParent)
{
Contract.Requires(templatedParent != null);
Control root = this.build(templatedParent);
this.SetTemplatedParent(root, templatedParent);
return root;
}
public static ControlTemplate Create(Func build)
where TControl : ITemplatedControl
{
Contract.Requires(build != null);
return new ControlTemplate(c => build((TControl)c));
}
private void SetTemplatedParent(Control control, ITemplatedControl templatedParent)
{
Contract.Requires(control != null);
Contract.Requires(templatedParent != null);
control.TemplatedParent = templatedParent;
foreach (Control child in ((IVisual)control).VisualChildren.OfType())
{
this.SetTemplatedParent(child, templatedParent);
}
}
}
}