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 @@ + + + +