Browse Source

Scroll down automatically when expanding a tree node.

pull/10/head
Daniel Grunwald 14 years ago
parent
commit
d39a806795
  1. 4
      SharpTreeView/SharpTreeNodeView.cs
  2. 29
      SharpTreeView/SharpTreeView.cs

4
SharpTreeView/SharpTreeNodeView.cs

@ -95,7 +95,9 @@ namespace ICSharpCode.TreeView @@ -95,7 +95,9 @@ namespace ICSharpCode.TreeView
}
}
} else if (e.PropertyName == "IsExpanded") {
if (Node.IsExpanded == false)
if (Node.IsExpanded)
ParentTreeView.HandleExpanding(Node);
else
ParentTreeView.HandleCollapsing(Node);
}
}

29
SharpTreeView/SharpTreeView.cs

@ -151,12 +151,35 @@ namespace ICSharpCode.TreeView @@ -151,12 +151,35 @@ namespace ICSharpCode.TreeView
container.ParentTreeView = this;
}
internal void HandleCollapsing(SharpTreeNode Node)
internal void HandleExpanding(SharpTreeNode node)
{
SharpTreeNode lastVisibleChild = node;
while (true) {
SharpTreeNode tmp = lastVisibleChild.Children.LastOrDefault(c => c.IsVisible);
if (tmp != null) {
lastVisibleChild = tmp;
} else {
break;
}
}
if (lastVisibleChild != node) {
// Make the the expanded children are visible; but don't scroll down
// to much (keep node itself visible)
base.ScrollIntoView(lastVisibleChild);
// For some reason, this only works properly when delaying it...
Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(
delegate {
base.ScrollIntoView(node);
}));
}
}
internal void HandleCollapsing(SharpTreeNode node)
{
var selectedChilds = Node.VisibleDescendants().Where(n => n.IsSelected);
var selectedChilds = node.VisibleDescendants().Where(n => n.IsSelected);
if (selectedChilds.Any()) {
var list = SelectedItems.Cast<SharpTreeNode>().Except(selectedChilds).ToList();
list.AddOnce(Node);
list.AddOnce(node);
SetSelectedItems(list);
}
}

Loading…
Cancel
Save