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); }
}
protected override Size MeasureCore(Size availableSize)
{
if (!this.createdChild)
{
this.CreateChild();
}
return base.MeasureCore(availableSize);
}
protected override Size MeasureOverride(Size availableSize)
{
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);
}

41
Perspex.Controls/Presenters/ItemsPresenter.cs

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

9
Perspex.Themes.Default/TreeViewStyle.cs

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

Loading…
Cancel
Save