From e893b6ffe69475e05927f1b7d9be2c5ded6b0d85 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 14 Sep 2014 05:14:24 +0200 Subject: [PATCH] Added an expander on the tree view items. --- Perspex/Controls/ItemsPresenter.cs | 9 ++++- Perspex/Themes/Default/TreeViewItemStyle.cs | 40 +++++++++++++++++++-- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/Perspex/Controls/ItemsPresenter.cs b/Perspex/Controls/ItemsPresenter.cs index 78ef051459..f01a21d2c5 100644 --- a/Perspex/Controls/ItemsPresenter.cs +++ b/Perspex/Controls/ItemsPresenter.cs @@ -107,7 +107,14 @@ namespace Perspex.Controls { if (this.panel != null) { - this.panel.Children = new Controls(this.CreateItemControls(items)); + var controls = this.CreateItemControls(items).ToList(); + + foreach (var control in controls) + { + control.TemplatedParent = null; + } + + this.panel.Children = new Controls(controls); } } } diff --git a/Perspex/Themes/Default/TreeViewItemStyle.cs b/Perspex/Themes/Default/TreeViewItemStyle.cs index f912f92cfb..030f0a81b8 100644 --- a/Perspex/Themes/Default/TreeViewItemStyle.cs +++ b/Perspex/Themes/Default/TreeViewItemStyle.cs @@ -8,6 +8,8 @@ namespace Perspex.Themes.Default { using System.Linq; using Perspex.Controls; + using Perspex.Media; + using Perspex.Shapes; using Perspex.Styling; public class TreeViewItemStyle : Styles @@ -23,6 +25,13 @@ namespace Perspex.Themes.Default new Setter(Button.TemplateProperty, ControlTemplate.Create(this.Template)), }, }, + new Style(x => x.OfType().Template().OfType().Class("expander")) + { + Setters = new[] + { + new Setter(ToggleButton.TemplateProperty, ControlTemplate.Create(this.ToggleButtonTemplate)), + }, + }, }); } @@ -32,18 +41,43 @@ namespace Perspex.Themes.Default { Children = new Controls { - new ContentPresenter + new StackPanel { - [~ContentPresenter.ContentProperty] = control[~TreeViewItem.HeaderProperty], + Orientation = Orientation.Horizontal, + Children = new Controls + { + new ToggleButton + { + Classes = new Classes("expander"), + }, + new ContentPresenter + { + [~ContentPresenter.ContentProperty] = control[~TreeViewItem.HeaderProperty], + }, + } }, new ItemsPresenter { - Margin = new Thickness(13, 0, 0, 0), + Margin = new Thickness(24, 0, 0, 0), [~ItemsPresenter.ItemsProperty] = control[~TreeViewItem.ItemsProperty], [~ItemsPresenter.ItemsPanelProperty] = control[~TreeViewItem.ItemsPanelProperty], } } }; } + + private Control ToggleButtonTemplate(ToggleButton control) + { + return new Path + { + Fill = Brushes.Black, + Stroke = Brushes.Black, + StrokeThickness = 1, + Width = 16, + Height = 16, + VerticalAlignment = Layout.VerticalAlignment.Center, + Data = StreamGeometry.Parse("M 4 0 L 8 4 L 4 8 Z"), + }; + } } }