diff --git a/Perspex/Controls/ItemsControl.cs b/Perspex/Controls/ItemsControl.cs index d3cb6eedf0..3de66cd865 100644 --- a/Perspex/Controls/ItemsControl.cs +++ b/Perspex/Controls/ItemsControl.cs @@ -9,6 +9,7 @@ namespace Perspex.Controls using System; using System.Collections; using System.Collections.Generic; + using System.Linq; public class ItemsControl : TemplatedControl { @@ -23,6 +24,11 @@ namespace Perspex.Controls private Dictionary itemControls = new Dictionary(); + public ItemsControl() + { + this.GetObservable(ItemsProperty).Subscribe(this.ItemsChanged); + } + public IEnumerable Items { get { return this.GetValue(ItemsProperty); } @@ -58,5 +64,17 @@ namespace Perspex.Controls { return (item as Control) ?? this.GetDataTemplate(item).Build(item); } + + private void ItemsChanged(IEnumerable items) + { + if (items == null || !items.OfType().Any()) + { + this.Classes.Add(":empty"); + } + else + { + this.Classes.Remove(":empty"); + } + } } } diff --git a/Perspex/Themes/Default/TreeViewItemStyle.cs b/Perspex/Themes/Default/TreeViewItemStyle.cs index c3a3b1d099..5a629d2f05 100644 --- a/Perspex/Themes/Default/TreeViewItemStyle.cs +++ b/Perspex/Themes/Default/TreeViewItemStyle.cs @@ -8,6 +8,7 @@ namespace Perspex.Themes.Default { using System.Linq; using Perspex.Controls; + using Perspex.Layout; using Perspex.Media; using Perspex.Shapes; using Perspex.Styling; @@ -32,6 +33,13 @@ namespace Perspex.Themes.Default new Setter(ToggleButton.TemplateProperty, ControlTemplate.Create(this.ToggleButtonTemplate)), }, }, + new Style(x => x.OfType().Class(":empty").Template().OfType().Class("expander")) + { + Setters = new[] + { + new Setter(ToggleButton.IsVisibleProperty, false), + }, + }, }); } @@ -41,9 +49,13 @@ namespace Perspex.Themes.Default { Children = new Controls { - new StackPanel + new Grid { - Orientation = Orientation.Horizontal, + ColumnDefinitions = new ColumnDefinitions + { + new ColumnDefinition(new GridLength(16, GridUnitType.Pixel)), + new ColumnDefinition(GridLength.Auto), + }, Children = new Controls { new ToggleButton @@ -53,6 +65,7 @@ namespace Perspex.Themes.Default }, new ContentPresenter { + [Grid.ColumnProperty] = 1, [~ContentPresenter.ContentProperty] = control[~TreeViewItem.HeaderProperty], }, } @@ -77,8 +90,8 @@ namespace Perspex.Themes.Default Fill = Brushes.Black, Stroke = Brushes.Black, StrokeThickness = 1, - Margin = new Thickness(3, 0), - VerticalAlignment = Layout.VerticalAlignment.Center, + HorizontalAlignment = HorizontalAlignment.Center, + VerticalAlignment = VerticalAlignment.Center, Data = StreamGeometry.Parse("M 0 2 L 4 6 L 0 10 Z"), } };