diff --git a/ILSpy/TreeNodes/AssemblyTreeNode.cs b/ILSpy/TreeNodes/AssemblyTreeNode.cs
index 73dbb38da..864759152 100644
--- a/ILSpy/TreeNodes/AssemblyTreeNode.cs
+++ b/ILSpy/TreeNodes/AssemblyTreeNode.cs
@@ -134,6 +134,10 @@ namespace ICSharpCode.ILSpy.TreeNodes
this.Children.Add(ns);
}
}
+
+ public override bool CanExpandRecursively {
+ get { return true; }
+ }
public TypeTreeNode FindTypeNode(TypeDefinition def)
{
diff --git a/ILSpy/TreeNodes/TypeTreeNode.cs b/ILSpy/TreeNodes/TypeTreeNode.cs
index 23bce5df7..efefb2928 100644
--- a/ILSpy/TreeNodes/TypeTreeNode.cs
+++ b/ILSpy/TreeNodes/TypeTreeNode.cs
@@ -117,6 +117,10 @@ namespace ICSharpCode.ILSpy.TreeNodes
}
}
+ public override bool CanExpandRecursively {
+ get { return true; }
+ }
+
public override void Decompile(Language language, ITextOutput output, DecompilationOptions options)
{
language.DecompileType(type, output, options);
diff --git a/SharpTreeView/SharpTreeNode.cs b/SharpTreeView/SharpTreeNode.cs
index 3de3c9f9f..ae0a0e646 100644
--- a/SharpTreeView/SharpTreeNode.cs
+++ b/SharpTreeView/SharpTreeNode.cs
@@ -267,12 +267,26 @@ namespace ICSharpCode.TreeView
lazyLoading = value;
if (lazyLoading) {
IsExpanded = false;
+ if (canExpandRecursively) {
+ canExpandRecursively = false;
+ RaisePropertyChanged("CanExpandRecursively");
+ }
}
RaisePropertyChanged("LazyLoading");
RaisePropertyChanged("ShowExpander");
}
}
+ bool canExpandRecursively = true;
+
+ ///
+ /// Gets whether this node can be expanded recursively.
+ /// If not overridden, this property returns false if the node is using lazy-loading, and true otherwise.
+ ///
+ public virtual bool CanExpandRecursively {
+ get { return canExpandRecursively; }
+ }
+
public virtual bool ShowIcon
{
get { return Icon != null; }
diff --git a/SharpTreeView/SharpTreeView.cs b/SharpTreeView/SharpTreeView.cs
index d9409b79b..f2a66c797 100644
--- a/SharpTreeView/SharpTreeView.cs
+++ b/SharpTreeView/SharpTreeView.cs
@@ -227,11 +227,28 @@ namespace ICSharpCode.TreeView
e.Handled = true;
}
break;
+ case Key.Multiply:
+ if (container != null && ItemsControl.ItemsControlFromItemContainer(container) == this) {
+ container.Node.IsExpanded = true;
+ ExpandRecursively(container.Node);
+ e.Handled = true;
+ }
+ break;
}
if (!e.Handled)
base.OnKeyDown(e);
}
+ void ExpandRecursively(SharpTreeNode node)
+ {
+ if (node.CanExpandRecursively) {
+ node.IsExpanded = true;
+ foreach (SharpTreeNode child in node.Children) {
+ ExpandRecursively(child);
+ }
+ }
+ }
+
///
/// Scrolls the specified node in view and sets keyboard focus on it.
///