diff --git a/Perspex.Themes.Default/DefaultTheme.cs b/Perspex.Themes.Default/DefaultTheme.cs index 5928731e02..51d915a43d 100644 --- a/Perspex.Themes.Default/DefaultTheme.cs +++ b/Perspex.Themes.Default/DefaultTheme.cs @@ -25,6 +25,7 @@ namespace Perspex.Themes.Default this.Add(new TabItemStyle()); this.Add(new TabStripStyle()); this.Add(new TextBoxStyle()); + this.Add(new ToggleButtonStyle()); this.Add(new TreeViewStyle()); this.Add(new TreeViewItemStyle()); this.Add(new WindowStyle()); diff --git a/Perspex.Themes.Default/Perspex.Themes.Default.csproj b/Perspex.Themes.Default/Perspex.Themes.Default.csproj index 66ccce37e1..e9c253b038 100644 --- a/Perspex.Themes.Default/Perspex.Themes.Default.csproj +++ b/Perspex.Themes.Default/Perspex.Themes.Default.csproj @@ -66,6 +66,7 @@ + diff --git a/Perspex.Themes.Default/ToggleButtonStyle.cs b/Perspex.Themes.Default/ToggleButtonStyle.cs new file mode 100644 index 0000000000..a8bd8d7155 --- /dev/null +++ b/Perspex.Themes.Default/ToggleButtonStyle.cs @@ -0,0 +1,106 @@ +// ----------------------------------------------------------------------- +// +// Copyright 2014 MIT Licence. See licence.md for more information. +// +// ----------------------------------------------------------------------- + +namespace Perspex.Themes.Default +{ + using System.Linq; + using Perspex.Controls; + using Perspex.Controls.Presenters; + using Perspex.Controls.Primitives; + using Perspex.Layout; + using Perspex.Media; + using Perspex.Styling; + + public class ToggleButtonStyle : Styles + { + public ToggleButtonStyle() + { + this.AddRange(new[] + { + new Style(x => x.OfType()) + { + Setters = new[] + { + new Setter(ToggleButton.TemplateProperty, ControlTemplate.Create(this.Template)), + new Setter(ToggleButton.HorizontalContentAlignmentProperty, HorizontalAlignment.Center), + new Setter(ToggleButton.VerticalContentAlignmentProperty, VerticalAlignment.Center), + }, + }, + new Style(x => x.OfType().Template().Id("border")) + { + Setters = new[] + { + new Setter(ToggleButton.BackgroundProperty, new SolidColorBrush(0xffdddddd)), + new Setter(ToggleButton.BorderBrushProperty, new SolidColorBrush(0xff707070)), + new Setter(ToggleButton.BorderThicknessProperty, 2.0), + new Setter(ToggleButton.ForegroundProperty, new SolidColorBrush(0xff000000)), + }, + }, + new Style(x => x.OfType().Class(":checked").Template().Id("border")) + { + Setters = new[] + { + new Setter(ToggleButton.BackgroundProperty, new SolidColorBrush(0xff7f7f7f)), + }, + }, + new Style(x => x.OfType().Class(":pointerover").Template().Id("border")) + { + Setters = new[] + { + new Setter(ToggleButton.BackgroundProperty, new SolidColorBrush(0xffbee6fd)), + new Setter(ToggleButton.BorderBrushProperty, new SolidColorBrush(0xff3c7fb1)), + }, + }, + new Style(x => x.OfType().Class(":checked").Class(":pointerover").Template().Id("border")) + { + Setters = new[] + { + new Setter(ToggleButton.BackgroundProperty, new SolidColorBrush(0xffa0a0a0)), + }, + }, + new Style(x => x.OfType().Class(":pointerover").Class(":pressed").Template().Id("border")) + { + Setters = new[] + { + new Setter(ToggleButton.BackgroundProperty, new SolidColorBrush(0xffc4e5f6)), + }, + }, + new Style(x => x.OfType().Class(":pressed").Template().Id("border")) + { + Setters = new[] + { + new Setter(ToggleButton.BorderBrushProperty, new SolidColorBrush(0xffff628b)), + }, + }, + new Style(x => x.OfType().Class(":disabled").Template().Id("border")) + { + Setters = new[] + { + new Setter(ToggleButton.ForegroundProperty, new SolidColorBrush(0xff7f7f7f)), + }, + }, + }); + } + + private Control Template(ToggleButton control) + { + Border border = new Border + { + Id = "border", + Padding = new Thickness(3), + Content = new ContentPresenter + { + [~ContentPresenter.ContentProperty] = control[~ToggleButton.ContentProperty], + [~ContentPresenter.HorizontalAlignmentProperty] = control[~ToggleButton.HorizontalContentAlignmentProperty], + [~ContentPresenter.VerticalAlignmentProperty] = control[~ToggleButton.VerticalContentAlignmentProperty], + }, + [~Border.BackgroundProperty] = control[~ToggleButton.BackgroundProperty], + }; + + return border; + } + } +} diff --git a/TestApplication/Program.cs b/TestApplication/Program.cs index 496517f494..aa667c1aad 100644 --- a/TestApplication/Program.cs +++ b/TestApplication/Program.cs @@ -185,6 +185,15 @@ namespace TestApplication IsEnabled = false, Background = new SolidColorBrush(0xcc119eda), }, + new ToggleButton + { + Content = "Toggle", + }, + new ToggleButton + { + Content = "Disabled", + IsEnabled = false, + }, new CheckBox { Content = "Checkbox",