Browse Source

Added ScrollViewer to TreeViewStyle.

pull/5/head
Steven Kirk 12 years ago
parent
commit
033c686456
  1. 19
      Perspex.Controls/Presenters/ContentPresenter.cs
  2. 41
      Perspex.Controls/Presenters/ItemsPresenter.cs
  3. 9
      Perspex.Themes.Default/TreeViewStyle.cs

19
Perspex.Controls/Presenters/ContentPresenter.cs

@ -30,6 +30,16 @@ namespace Perspex.Controls.Presenters
set { this.SetValue(ContentProperty, value); } set { this.SetValue(ContentProperty, value); }
} }
protected override Size MeasureCore(Size availableSize)
{
if (!this.createdChild)
{
this.CreateChild();
}
return base.MeasureCore(availableSize);
}
protected override Size MeasureOverride(Size availableSize) protected override Size MeasureOverride(Size availableSize)
{ {
if (!this.createdChild) if (!this.createdChild)
@ -85,7 +95,14 @@ namespace Perspex.Controls.Presenters
} }
} }
result.TemplatedParent = null; var foo = this.TemplatedParent as TemplatedControl;
if (foo != null)
{
foo = foo.TemplatedParent as TemplatedControl;
}
result.TemplatedParent = foo;
this.AddVisualChild(result); this.AddVisualChild(result);
} }

41
Perspex.Controls/Presenters/ItemsPresenter.cs

@ -63,8 +63,8 @@ namespace Perspex.Controls.Presenters
this.ClearVisualChildren(); this.ClearVisualChildren();
this.panel = this.ItemsPanel.Build(); this.panel = this.ItemsPanel.Build();
this.AddVisualChild(this.panel); this.AddVisualChild(this.panel);
this.ItemsChanged(Tuple.Create(default(IEnumerable), this.Items));
this.createdPanel = true; this.createdPanel = true;
this.ItemsChanged(Tuple.Create(default(IEnumerable), this.Items));
} }
private IItemContainerGenerator GetGenerator() private IItemContainerGenerator GetGenerator()
@ -81,31 +81,34 @@ namespace Perspex.Controls.Presenters
private void ItemsChanged(Tuple<IEnumerable, IEnumerable> value) private void ItemsChanged(Tuple<IEnumerable, IEnumerable> value)
{ {
var generator = this.GetGenerator(); if (this.createdPanel)
if (value.Item1 != null)
{ {
this.panel.Children.RemoveAll(generator.Remove(value.Item1)); var generator = this.GetGenerator();
INotifyCollectionChanged incc = value.Item1 as INotifyCollectionChanged;
if (incc != null) if (value.Item1 != null)
{ {
incc.CollectionChanged -= this.ItemsCollectionChanged; this.panel.Children.RemoveAll(generator.Remove(value.Item1));
INotifyCollectionChanged incc = value.Item1 as INotifyCollectionChanged;
if (incc != null)
{
incc.CollectionChanged -= this.ItemsCollectionChanged;
}
} }
}
if (this.panel != null) if (this.panel != null)
{
if (value.Item2 != null)
{ {
this.panel.Children.AddRange(generator.Generate(this.Items)); if (value.Item2 != null)
{
this.panel.Children.AddRange(generator.Generate(this.Items));
INotifyCollectionChanged incc = value.Item2 as INotifyCollectionChanged; INotifyCollectionChanged incc = value.Item2 as INotifyCollectionChanged;
if (incc != null) if (incc != null)
{ {
incc.CollectionChanged += this.ItemsCollectionChanged; incc.CollectionChanged += this.ItemsCollectionChanged;
}
} }
} }
} }
@ -113,7 +116,7 @@ namespace Perspex.Controls.Presenters
private void ItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) private void ItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{ {
if (this.panel != null) if (this.createdPanel)
{ {
var generator = this.GetGenerator(); var generator = this.GetGenerator();

9
Perspex.Themes.Default/TreeViewStyle.cs

@ -38,10 +38,13 @@ namespace Perspex.Themes.Default
[~Border.BackgroundProperty] = control[~TreeView.BackgroundProperty], [~Border.BackgroundProperty] = control[~TreeView.BackgroundProperty],
[~Border.BorderBrushProperty] = control[~TreeView.BorderBrushProperty], [~Border.BorderBrushProperty] = control[~TreeView.BorderBrushProperty],
[~Border.BorderThicknessProperty] = control[~TreeView.BorderThicknessProperty], [~Border.BorderThicknessProperty] = control[~TreeView.BorderThicknessProperty],
Content = new ItemsPresenter Content = new ScrollViewer
{ {
[~ItemsPresenter.ItemsProperty] = control[~TreeView.ItemsProperty], Content = new ItemsPresenter
[~ItemsPresenter.ItemsPanelProperty] = control[~TreeView.ItemsPanelProperty], {
[~ItemsPresenter.ItemsProperty] = control[~TreeView.ItemsProperty],
[~ItemsPresenter.ItemsPanelProperty] = control[~TreeView.ItemsPanelProperty],
}
} }
}; };
} }

Loading…
Cancel
Save