Browse Source

Improve SharpTreeView keyboard navigation.

pull/1/head
Daniel Grunwald 15 years ago
parent
commit
cb2deee9d3
  1. 35
      SharpTreeView/SharpTreeView.cs
  2. 1
      SharpTreeView/SharpTreeViewItem.cs

35
SharpTreeView/SharpTreeView.cs

@ -162,29 +162,38 @@ namespace ICSharpCode.TreeView
protected override void OnKeyDown(KeyEventArgs e) protected override void OnKeyDown(KeyEventArgs e)
{ {
SharpTreeViewItem container = e.OriginalSource as SharpTreeViewItem;
switch (e.Key) { switch (e.Key) {
case Key.Left: case Key.Left:
if (container != null && ItemsControl.ItemsControlFromItemContainer(container) == this) {
if (container.Node.IsExpanded) {
container.Node.IsExpanded = false;
} else if (container.Node.Parent != null) {
this.FocusNode(container.Node.Parent);
}
e.Handled = true;
}
break;
case Key.Right: case Key.Right:
SharpTreeViewItem container = e.OriginalSource as SharpTreeViewItem;
if (container != null && ItemsControl.ItemsControlFromItemContainer(container) == this) { if (container != null && ItemsControl.ItemsControlFromItemContainer(container) == this) {
bool newExpanded = (e.Key == Key.Right); if (!container.Node.IsExpanded && container.Node.ShowExpander) {
if (container.Node.IsExpanded != newExpanded) { container.Node.IsExpanded = true;
container.Node.IsExpanded = newExpanded; } else if (container.Node.Children.Count > 0) {
} else { // jump to first child:
// already in collapsed/expanded - jump to parent/first child: container.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));
if (e.Key == Key.Right) {
container.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));
} else if (container.Node.Parent != null) {
this.FocusNode(container.Node.Parent);
}
} }
e.Handled = true; e.Handled = true;
} }
break; break;
default: case Key.Return:
base.OnKeyDown(e); case Key.Space:
if (container != null && Keyboard.Modifiers == ModifierKeys.None && this.SelectedItems.Count == 1 && this.SelectedItem == container.Node) {
container.Node.ActivateItem(e);
}
break; break;
} }
if (!e.Handled)
base.OnKeyDown(e);
} }
public void FocusNode(SharpTreeNode node) public void FocusNode(SharpTreeNode node)

1
SharpTreeView/SharpTreeViewItem.cs

@ -37,6 +37,7 @@ namespace ICSharpCode.TreeView
case Key.F2: case Key.F2:
if (SharpTreeNode.ActiveNodes.Count == 1 && Node.IsEditable) { if (SharpTreeNode.ActiveNodes.Count == 1 && Node.IsEditable) {
Node.IsEditing = true; Node.IsEditing = true;
e.Handled = true;
} }
break; break;
case Key.Escape: case Key.Escape:

Loading…
Cancel
Save