From 60c830203372ee873f6c814f93cb267f75d0a0c6 Mon Sep 17 00:00:00 2001 From: grokys Date: Mon, 3 Feb 2014 10:14:00 +0100 Subject: [PATCH] Moved template into theme. --- Perspex.Windows/Window.cs | 3 ++- Perspex/ControlTemplate.cs | 25 +++++++++++++++++++++++++ Perspex/Controls/Button.cs | 13 ------------- Perspex/Controls/TemplatedControl.cs | 15 ++++----------- Perspex/Perspex.csproj | 1 + Perspex/Themes/Default/ButtonStyle.cs | 14 ++++++++++++++ 6 files changed, 46 insertions(+), 25 deletions(-) create mode 100644 Perspex/ControlTemplate.cs diff --git a/Perspex.Windows/Window.cs b/Perspex.Windows/Window.cs index beea0502e3..7ad87de3ad 100644 --- a/Perspex.Windows/Window.cs +++ b/Perspex.Windows/Window.cs @@ -39,6 +39,7 @@ namespace Perspex.Windows Size clientSize = this.ClientSize; this.LayoutManager = new LayoutManager(); this.renderer = new Renderer(this.Handle, (int)clientSize.Width, (int)clientSize.Height); + this.Template = ControlTemplate.Create(this.DefaultTemplate); this.LayoutManager.LayoutNeeded.Subscribe(x => { @@ -79,7 +80,7 @@ namespace Perspex.Windows UnmanagedMethods.ShowWindow(this.Handle, 4); } - protected override Visual DefaultTemplate() + private Visual DefaultTemplate(Window c) { Border border = new Border(); border.Background = new Perspex.Media.SolidColorBrush(0xffffffff); diff --git a/Perspex/ControlTemplate.cs b/Perspex/ControlTemplate.cs new file mode 100644 index 0000000000..5110d57405 --- /dev/null +++ b/Perspex/ControlTemplate.cs @@ -0,0 +1,25 @@ +namespace Perspex +{ + using System; + using Perspex.Controls; + + public class ControlTemplate + { + public ControlTemplate(Func build) + { + this.Build = build; + } + + public Func Build + { + get; + private set; + } + + public static ControlTemplate Create(Func build) + where TControl : TemplatedControl + { + return new ControlTemplate(c => build((TControl)c)); + } + } +} diff --git a/Perspex/Controls/Button.cs b/Perspex/Controls/Button.cs index 45dbc9138b..8462a6deba 100644 --- a/Perspex/Controls/Button.cs +++ b/Perspex/Controls/Button.cs @@ -22,18 +22,5 @@ namespace Perspex.Controls this.Classes.Remove(":pressed"); }); } - - protected override Visual DefaultTemplate() - { - Border border = new Border(); - border.SetValue(Border.BackgroundProperty, this.GetObservable(Button.BackgroundProperty)); - border.SetValue(Border.BorderBrushProperty, this.GetObservable(Button.BorderBrushProperty)); - border.SetValue(Border.BorderThicknessProperty, this.GetObservable(Button.BorderThicknessProperty)); - border.Padding = new Thickness(3); - ContentPresenter contentPresenter = new ContentPresenter(); - contentPresenter.SetValue(ContentPresenter.ContentProperty, this.GetObservable(Button.ContentProperty)); - border.Content = contentPresenter; - return border; - } } } diff --git a/Perspex/Controls/TemplatedControl.cs b/Perspex/Controls/TemplatedControl.cs index 3198e6075e..2f32c793de 100644 --- a/Perspex/Controls/TemplatedControl.cs +++ b/Perspex/Controls/TemplatedControl.cs @@ -13,17 +13,12 @@ namespace Perspex.Controls public abstract class TemplatedControl : Control { - public static readonly PerspexProperty> TemplateProperty = - PerspexProperty.Register>("Template"); + public static readonly PerspexProperty TemplateProperty = + PerspexProperty.Register("Template"); private Visual visualChild; - public TemplatedControl() - { - this.Template = owner => this.DefaultTemplate(); - } - - public Func Template + public ControlTemplate Template { get { return this.GetValue(TemplateProperty); } set { this.SetValue(TemplateProperty, value); } @@ -37,7 +32,7 @@ namespace Perspex.Controls if (this.visualChild == null && template != null) { - this.visualChild = template(this); + this.visualChild = template.Build(this); this.visualChild.VisualParent = this; } @@ -48,7 +43,5 @@ namespace Perspex.Controls public sealed override void Render(IDrawingContext context) { } - - protected abstract Visual DefaultTemplate(); } } diff --git a/Perspex/Perspex.csproj b/Perspex/Perspex.csproj index 720b68273a..3ca1b13725 100644 --- a/Perspex/Perspex.csproj +++ b/Perspex/Perspex.csproj @@ -76,6 +76,7 @@ + diff --git a/Perspex/Themes/Default/ButtonStyle.cs b/Perspex/Themes/Default/ButtonStyle.cs index 32d1f600dd..ffea712ddd 100644 --- a/Perspex/Themes/Default/ButtonStyle.cs +++ b/Perspex/Themes/Default/ButtonStyle.cs @@ -22,6 +22,7 @@ namespace Perspex.Themes.Default new Setter(Button.BorderBrushProperty, new SolidColorBrush(0xff707070)), new Setter(Button.BorderThicknessProperty, 2.0), new Setter(Button.ForegroundProperty, new SolidColorBrush(0xff000000)), + new Setter(Button.TemplateProperty, ControlTemplate.Create