diff --git a/src/Libraries/SharpTreeView/ICSharpCode.TreeView.Demo/Window1.xaml b/src/Libraries/SharpTreeView/ICSharpCode.TreeView.Demo/Window1.xaml
index a7a99f634e..95603817a9 100644
--- a/src/Libraries/SharpTreeView/ICSharpCode.TreeView.Demo/Window1.xaml
+++ b/src/Libraries/SharpTreeView/ICSharpCode.TreeView.Demo/Window1.xaml
@@ -32,7 +32,7 @@
Grid.Column="1"
Margin="10 0 0 0">
-
+
@@ -56,7 +56,7 @@
-
+
diff --git a/src/Libraries/SharpTreeView/ICSharpCode.TreeView.Demo/Window1.xaml.cs b/src/Libraries/SharpTreeView/ICSharpCode.TreeView.Demo/Window1.xaml.cs
index 7ccd7e38f6..ffeeb0facc 100644
--- a/src/Libraries/SharpTreeView/ICSharpCode.TreeView.Demo/Window1.xaml.cs
+++ b/src/Libraries/SharpTreeView/ICSharpCode.TreeView.Demo/Window1.xaml.cs
@@ -21,9 +21,12 @@ namespace ICSharpCode.TreeView.Demo
InitializeComponent();
treeView1.Root = new FolderNode("c:\\");
+ //treeView1.ShowRoot = false;
//treeView1.SelectionChanged += new SelectionChangedEventHandler(treeView1_SelectionChanged);
treeView2.Root = new FolderNode("c:\\");
+ //treeView2.ShowRootExpander = true;
+ //treeView2.ShowRoot = false;
}
//void treeView1_SelectionChanged(object sender, SelectionChangedEventArgs e)
diff --git a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/ICSharpCode.TreeView.csproj b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/ICSharpCode.TreeView.csproj
index 2df7f7c903..f253f7e197 100644
--- a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/ICSharpCode.TreeView.csproj
+++ b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/ICSharpCode.TreeView.csproj
@@ -70,6 +70,7 @@
Code
+
diff --git a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/LinesRenderer.cs b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/LinesRenderer.cs
index 739e2cccdc..5aeef8acdd 100644
--- a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/LinesRenderer.cs
+++ b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/LinesRenderer.cs
@@ -25,10 +25,14 @@ namespace ICSharpCode.TreeView
protected override void OnRender(DrawingContext dc)
{
var indent = NodeView.CalculateIndent();
- if (indent == 0) return;
-
var p = new Point(indent + 4.5, 0);
+ if (!NodeView.Node.IsRoot || NodeView.ParentTreeView.ShowRootExpander) {
+ dc.DrawLine(pen, new Point(p.X, ActualHeight / 2), new Point(p.X + 10, ActualHeight / 2));
+ }
+
+ if (NodeView.Node.IsRoot) return;
+
if (NodeView.Node.IsLast) {
dc.DrawLine(pen, p, new Point(p.X, ActualHeight / 2));
}
@@ -36,8 +40,6 @@ namespace ICSharpCode.TreeView
dc.DrawLine(pen, p, new Point(p.X, ActualHeight));
}
- dc.DrawLine(pen, new Point(p.X, ActualHeight / 2), new Point(p.X + 10, ActualHeight / 2));
-
var current = NodeView.Node;
while (true) {
p.X -= 19;
diff --git a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpGridView.cs b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpGridView.cs
new file mode 100644
index 0000000000..9255b95829
--- /dev/null
+++ b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpGridView.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+using System.Windows;
+
+namespace ICSharpCode.TreeView
+{
+ public class SharpGridView : GridView
+ {
+ static SharpGridView()
+ {
+ ItemContainerStyleKey =
+ new ComponentResourceKey(typeof(SharpTreeView), "GridViewItemContainerStyleKey");
+ }
+
+ public static ResourceKey ItemContainerStyleKey { get; private set; }
+
+ protected override object ItemContainerDefaultStyleKey
+ {
+ get
+ {
+ return ItemContainerStyleKey;
+ }
+ }
+ }
+}
diff --git a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeNode.cs b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeNode.cs
index 179468526e..fdff05acbd 100644
--- a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeNode.cs
+++ b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeNode.cs
@@ -61,6 +61,11 @@ namespace ICSharpCode.TreeView
get { return Parent != null ? Parent.Level + 1 : 0; }
}
+ public bool IsRoot
+ {
+ get { return Parent == null; }
+ }
+
//bool isSelected;
//public bool IsSelected
diff --git a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeView.cs b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeView.cs
index 02c67ae5fa..51c4d2915e 100644
--- a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeView.cs
+++ b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeView.cs
@@ -15,6 +15,9 @@ namespace ICSharpCode.TreeView
{
static SharpTreeView()
{
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(SharpTreeView),
+ new FrameworkPropertyMetadata(typeof(SharpTreeView)));
+
SelectionModeProperty.OverrideMetadata(typeof(SharpTreeView),
new FrameworkPropertyMetadata(SelectionMode.Extended));
@@ -137,7 +140,7 @@ namespace ICSharpCode.TreeView
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
base.PrepareContainerForItemOverride(element, item);
- var container = element as SharpTreeViewItem;
+ SharpTreeViewItem container = element as SharpTreeViewItem;
container.ParentTreeView = this;
}
@@ -203,15 +206,28 @@ namespace ICSharpCode.TreeView
#region Drag and Drop
protected override void OnDragEnter(DragEventArgs e)
+ {
+ OnDragOver(e);
+ }
+
+ protected override void OnDragOver(DragEventArgs e)
{
e.Effects = DragDropEffects.None;
e.Handled = true;
+
+ if (Root != null && !ShowRoot && Root.Children.Count == 0) {
+ Root.InternalCanDrop(e, 0);
+ }
}
- protected override void OnDragOver(DragEventArgs e)
+ protected override void OnDrop(DragEventArgs e)
{
e.Effects = DragDropEffects.None;
e.Handled = true;
+
+ if (Root != null && !ShowRoot && Root.Children.Count == 0) {
+ Root.InternalDrop(e, 0);
+ }
}
internal void HandleDragEnter(SharpTreeViewItem item, DragEventArgs e)
diff --git a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeViewItem.cs b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeViewItem.cs
index 3016a4b690..fcd35820ac 100644
--- a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeViewItem.cs
+++ b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeViewItem.cs
@@ -75,7 +75,9 @@ namespace ICSharpCode.TreeView
CaptureMouse();
if (e.ClickCount == 2) {
- Node.IsExpanded = !Node.IsExpanded;
+ if (!Node.IsRoot || ParentTreeView.ShowRootExpander) {
+ Node.IsExpanded = !Node.IsExpanded;
+ }
}
}
}
diff --git a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/Themes/Generic.xaml b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/Themes/Generic.xaml
index 17a34bcdae..2a2e882132 100644
--- a/src/Libraries/SharpTreeView/ICSharpCode.TreeView/Themes/Generic.xaml
+++ b/src/Libraries/SharpTreeView/ICSharpCode.TreeView/Themes/Generic.xaml
@@ -93,6 +93,17 @@
+
+
+
+