Browse Source

Hide expander when tree node has no children.

pull/4/head
Steven Kirk 12 years ago
parent
commit
98a2980cb5
  1. 18
      Perspex/Controls/ItemsControl.cs
  2. 21
      Perspex/Themes/Default/TreeViewItemStyle.cs

18
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<object, Control> itemControls = new Dictionary<object, Control>();
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<object>().Any())
{
this.Classes.Add(":empty");
}
else
{
this.Classes.Remove(":empty");
}
}
}
}

21
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<ToggleButton>(this.ToggleButtonTemplate)),
},
},
new Style(x => x.OfType<TreeViewItem>().Class(":empty").Template().OfType<ToggleButton>().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"),
}
};

Loading…
Cancel
Save