From 08f067b98309245373941fb47caf3a05feb6196d Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 16 Oct 2015 01:20:34 +0200 Subject: [PATCH] Added basic support for control templates in XAML. Still need TemplateBinding markup extension. --- .../XamlTestApplicationPcl/XamlTestApp.paml | 17 +++++++++++++++ .../Context/PerspexObjectAssembler.cs | 1 + .../Context/PerspexWiringContext.cs | 2 ++ .../Perspex.Markup.Xaml.csproj | 1 + .../Templates/ControlTemplate.cs | 21 +++++++++++++++++++ 5 files changed, 42 insertions(+) create mode 100644 src/Markup/Perspex.Markup.Xaml/Templates/ControlTemplate.cs diff --git a/samples/XamlTestApplicationPcl/XamlTestApp.paml b/samples/XamlTestApplicationPcl/XamlTestApp.paml index 09d5504bfd..e08382ec1a 100644 --- a/samples/XamlTestApplicationPcl/XamlTestApp.paml +++ b/samples/XamlTestApplicationPcl/XamlTestApp.paml @@ -1,4 +1,21 @@  + + + \ No newline at end of file diff --git a/src/Markup/Perspex.Markup.Xaml/Context/PerspexObjectAssembler.cs b/src/Markup/Perspex.Markup.Xaml/Context/PerspexObjectAssembler.cs index 25df85a3cc..2e3f6a2f9f 100644 --- a/src/Markup/Perspex.Markup.Xaml/Context/PerspexObjectAssembler.cs +++ b/src/Markup/Perspex.Markup.Xaml/Context/PerspexObjectAssembler.cs @@ -15,6 +15,7 @@ namespace Perspex.Markup.Xaml.Context public PerspexObjectAssembler(IWiringContext wiringContext, ObjectAssemblerSettings objectAssemblerSettings = null) { var mapping = new DeferredLoaderMapping(); + mapping.Map(template => template.Content, new TemplateLoader()); mapping.Map(template => template.Content, new TemplateLoader()); mapping.Map(template => template.Content, new TemplateLoader()); diff --git a/src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs b/src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs index 3e5b5c24c2..e4b5697a96 100644 --- a/src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs +++ b/src/Markup/Perspex.Markup.Xaml/Context/PerspexWiringContext.cs @@ -115,11 +115,13 @@ namespace Perspex.Markup.Xaml.Context var contentProperties = new Collection { new ContentPropertyDefinition(typeof(ContentControl), "Content"), + new ContentPropertyDefinition(typeof(ControlTemplate), "Content"), new ContentPropertyDefinition(typeof(DataTemplate), "Content"), new ContentPropertyDefinition(typeof(Decorator), "Child"), new ContentPropertyDefinition(typeof(ItemsControl), "Items"), new ContentPropertyDefinition(typeof(GradientBrush), "GradientStops"), new ContentPropertyDefinition(typeof(Panel), "Children"), + new ContentPropertyDefinition(typeof(Setter), "Value"), new ContentPropertyDefinition(typeof(Style), "Setters"), new ContentPropertyDefinition(typeof(TextBlock), "Text"), new ContentPropertyDefinition(typeof(TextBox), "Text"), diff --git a/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj b/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj index d34c97c50f..f7a1408f5d 100644 --- a/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj +++ b/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj @@ -229,6 +229,7 @@ + diff --git a/src/Markup/Perspex.Markup.Xaml/Templates/ControlTemplate.cs b/src/Markup/Perspex.Markup.Xaml/Templates/ControlTemplate.cs new file mode 100644 index 0000000000..bf6cb754e7 --- /dev/null +++ b/src/Markup/Perspex.Markup.Xaml/Templates/ControlTemplate.cs @@ -0,0 +1,21 @@ +// Copyright (c) The Perspex Project. All rights reserved. +// Licensed under the MIT license. See licence.md file in the project root for full license information. + +using System; +using Perspex.Controls; +using Perspex.Controls.Templates; +using Perspex.Styling; + +namespace Perspex.Markup.Xaml.Templates +{ + public class ControlTemplate : IControlTemplate + { + public Type TargetType { get; set; } + public TemplateContent Content { get; set; } + + public IControl Build(ITemplatedControl control) + { + return Content.Load(); + } + } +} \ No newline at end of file