Browse Source

Proof out the changes necessary for making SharpTreeNode cross platform by proxying System.Windows dependencies

pull/3240/head
Christoph Wille 11 months ago
parent
commit
52256fded6
  1. 3
      ILSpy/Analyzers/AnalyzerEntityTreeNode.cs
  2. 3
      ILSpy/Analyzers/TreeNodes/AnalyzedModuleTreeNode.cs
  3. 9
      ILSpy/TreeNodes/AssemblyListTreeNode.cs
  4. 3
      ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs
  5. 10
      ILSpy/TreeNodes/AssemblyTreeNode.cs
  6. 3
      ILSpy/TreeNodes/BaseTypesEntryNode.cs
  7. 3
      ILSpy/TreeNodes/DerivedTypesEntryNode.cs
  8. 3
      ILSpy/TreeNodes/ILSpyTreeNode.cs
  9. 3
      ILSpy/TreeNodes/ModuleReferenceTreeNode.cs
  10. 10
      SharpTreeView/PlatformAbstractions/IPlatformDataObject.cs
  11. 7
      SharpTreeView/PlatformAbstractions/IPlatformDragDrop.cs
  12. 8
      SharpTreeView/PlatformAbstractions/IPlatformDragEventArgs.cs
  13. 7
      SharpTreeView/PlatformAbstractions/IPlatformRoutedEventArgs.cs
  14. 29
      SharpTreeView/PlatformAbstractions/WpfWindows/WpfWindowsDataObject.cs
  15. 12
      SharpTreeView/PlatformAbstractions/WpfWindows/WpfWindowsDragDropManager.cs
  16. 18
      SharpTreeView/PlatformAbstractions/WpfWindows/WpfWindowsDragEventArgs.cs
  17. 16
      SharpTreeView/PlatformAbstractions/WpfWindows/WpfWindowsRoutedEventArgs.cs
  18. 36
      SharpTreeView/PlatformAbstractions/XPlatDragDropEffects.cs
  19. 28
      SharpTreeView/SharpTreeNode.cs
  20. 14
      SharpTreeView/SharpTreeView.cs
  21. 8
      SharpTreeView/SharpTreeViewItem.cs

3
ILSpy/Analyzers/AnalyzerEntityTreeNode.cs

@ -23,6 +23,7 @@ using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.ILSpy.TreeNodes; using ICSharpCode.ILSpy.TreeNodes;
using ICSharpCode.ILSpyX; using ICSharpCode.ILSpyX;
using ICSharpCode.TreeView; using ICSharpCode.TreeView;
using ICSharpCode.TreeView.PlatformAbstractions;
namespace ICSharpCode.ILSpy.Analyzers namespace ICSharpCode.ILSpy.Analyzers
{ {
@ -33,7 +34,7 @@ namespace ICSharpCode.ILSpy.Analyzers
{ {
public abstract IEntity Member { get; } public abstract IEntity Member { get; }
public override void ActivateItem(System.Windows.RoutedEventArgs e) public override void ActivateItem(IPlatformRoutedEventArgs e)
{ {
e.Handled = true; e.Handled = true;
if (this.Member == null || this.Member.MetadataToken.IsNil) if (this.Member == null || this.Member.MetadataToken.IsNil)

3
ILSpy/Analyzers/TreeNodes/AnalyzedModuleTreeNode.cs

@ -22,6 +22,7 @@ using System.Windows;
using ICSharpCode.Decompiler.TypeSystem; using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.ILSpyX.Analyzers; using ICSharpCode.ILSpyX.Analyzers;
using ICSharpCode.TreeView.PlatformAbstractions;
namespace ICSharpCode.ILSpy.Analyzers.TreeNodes namespace ICSharpCode.ILSpy.Analyzers.TreeNodes
{ {
@ -52,7 +53,7 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes
} }
} }
public override void ActivateItem(RoutedEventArgs e) public override void ActivateItem(IPlatformRoutedEventArgs e)
{ {
e.Handled = true; e.Handled = true;
if (analyzedModule.MetadataFile == null) if (analyzedModule.MetadataFile == null)

9
ILSpy/TreeNodes/AssemblyListTreeNode.cs

@ -27,6 +27,7 @@ using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.Decompiler.Util; using ICSharpCode.Decompiler.Util;
using ICSharpCode.ILSpyX; using ICSharpCode.ILSpyX;
using ICSharpCode.TreeView; using ICSharpCode.TreeView;
using ICSharpCode.TreeView.PlatformAbstractions;
namespace ICSharpCode.ILSpy.TreeNodes namespace ICSharpCode.ILSpy.TreeNodes
{ {
@ -81,21 +82,21 @@ namespace ICSharpCode.ILSpy.TreeNodes
}; };
} }
public override bool CanDrop(DragEventArgs e, int index) public override bool CanDrop(IPlatformDragEventArgs e, int index)
{ {
e.Effects = DragDropEffects.Move | DragDropEffects.Copy | DragDropEffects.Link; e.Effects = XPlatDragDropEffects.Move | XPlatDragDropEffects.Copy | XPlatDragDropEffects.Link;
if (e.Data.GetDataPresent(AssemblyTreeNode.DataFormat)) if (e.Data.GetDataPresent(AssemblyTreeNode.DataFormat))
return true; return true;
else if (e.Data.GetDataPresent(DataFormats.FileDrop)) else if (e.Data.GetDataPresent(DataFormats.FileDrop))
return true; return true;
else else
{ {
e.Effects = DragDropEffects.None; e.Effects = XPlatDragDropEffects.None;
return false; return false;
} }
} }
public override void Drop(DragEventArgs e, int index) public override void Drop(IPlatformDragEventArgs e, int index)
{ {
string[] files = e.Data.GetData(AssemblyTreeNode.DataFormat) as string[]; string[] files = e.Data.GetData(AssemblyTreeNode.DataFormat) as string[];
if (files == null) if (files == null)

3
ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs

@ -22,6 +22,7 @@ using System.Windows.Threading;
using ICSharpCode.Decompiler; using ICSharpCode.Decompiler;
using ICSharpCode.Decompiler.Metadata; using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.Decompiler.TypeSystem; using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.TreeView.PlatformAbstractions;
namespace ICSharpCode.ILSpy.TreeNodes namespace ICSharpCode.ILSpy.TreeNodes
{ {
@ -66,7 +67,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
} }
} }
public override void ActivateItem(System.Windows.RoutedEventArgs e) public override void ActivateItem(IPlatformRoutedEventArgs e)
{ {
if (parentAssembly.Parent is AssemblyListTreeNode assemblyListNode) if (parentAssembly.Parent is AssemblyListTreeNode assemblyListNode)
{ {

10
ILSpy/TreeNodes/AssemblyTreeNode.cs

@ -36,6 +36,8 @@ using ICSharpCode.ILSpyX;
using ICSharpCode.ILSpyX.FileLoaders; using ICSharpCode.ILSpyX.FileLoaders;
using ICSharpCode.ILSpyX.PdbProvider; using ICSharpCode.ILSpyX.PdbProvider;
using ICSharpCode.TreeView; using ICSharpCode.TreeView;
using ICSharpCode.TreeView.PlatformAbstractions;
using ICSharpCode.TreeView.PlatformAbstractions.WpfWindows;
using Microsoft.Win32; using Microsoft.Win32;
@ -410,9 +412,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
return nodes.All(n => n is AssemblyTreeNode { PackageEntry: null }); return nodes.All(n => n is AssemblyTreeNode { PackageEntry: null });
} }
public override void StartDrag(DependencyObject dragSource, SharpTreeNode[] nodes) public override void StartDrag(object dragSource, SharpTreeNode[] nodes, IPlatformDragDrop dragdropManager)
{ {
DragDrop.DoDragDrop(dragSource, Copy(nodes), DragDropEffects.All); dragdropManager.DoDragDrop(dragSource, Copy(nodes), XPlatDragDropEffects.All);
} }
public override bool CanDelete() public override bool CanDelete()
@ -433,9 +435,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
internal const string DataFormat = "ILSpyAssemblies"; internal const string DataFormat = "ILSpyAssemblies";
public override IDataObject Copy(SharpTreeNode[] nodes) public override IPlatformDataObject Copy(SharpTreeNode[] nodes)
{ {
DataObject dataObject = new DataObject(); var dataObject = new WpfWindowsDataObject(new DataObject());
dataObject.SetData(DataFormat, nodes.OfType<AssemblyTreeNode>().Select(n => n.LoadedAssembly.FileName).ToArray()); dataObject.SetData(DataFormat, nodes.OfType<AssemblyTreeNode>().Select(n => n.LoadedAssembly.FileName).ToArray());
return dataObject; return dataObject;
} }

3
ILSpy/TreeNodes/BaseTypesEntryNode.cs

@ -21,6 +21,7 @@ using System.Linq;
using ICSharpCode.Decompiler; using ICSharpCode.Decompiler;
using ICSharpCode.Decompiler.TypeSystem; using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.TreeView; using ICSharpCode.TreeView;
using ICSharpCode.TreeView.PlatformAbstractions;
namespace ICSharpCode.ILSpy.TreeNodes namespace ICSharpCode.ILSpy.TreeNodes
{ {
@ -37,7 +38,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Icon => type.Kind == TypeKind.Interface ? Images.Interface : Images.Class; public override object Icon => type.Kind == TypeKind.Interface ? Images.Interface : Images.Class;
public override void ActivateItem(System.Windows.RoutedEventArgs e) public override void ActivateItem(IPlatformRoutedEventArgs e)
{ {
e.Handled = ActivateItem(this, type); e.Handled = ActivateItem(this, type);
} }

3
ILSpy/TreeNodes/DerivedTypesEntryNode.cs

@ -26,6 +26,7 @@ using ICSharpCode.ILSpyX;
namespace ICSharpCode.ILSpy.TreeNodes namespace ICSharpCode.ILSpy.TreeNodes
{ {
using ICSharpCode.Decompiler.TypeSystem; using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.TreeView.PlatformAbstractions;
class DerivedTypesEntryNode : ILSpyTreeNode, IMemberTreeNode class DerivedTypesEntryNode : ILSpyTreeNode, IMemberTreeNode
{ {
@ -89,7 +90,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
return DerivedTypesTreeNode.FindDerivedTypes(list, type, ct); return DerivedTypesTreeNode.FindDerivedTypes(list, type, ct);
} }
public override void ActivateItem(System.Windows.RoutedEventArgs e) public override void ActivateItem(IPlatformRoutedEventArgs e)
{ {
e.Handled = BaseTypesEntryNode.ActivateItem(this, type); e.Handled = BaseTypesEntryNode.ActivateItem(this, type);
} }

3
ILSpy/TreeNodes/ILSpyTreeNode.cs

@ -31,6 +31,7 @@ using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.ILSpy.Options; using ICSharpCode.ILSpy.Options;
using ICSharpCode.ILSpyX.Abstractions; using ICSharpCode.ILSpyX.Abstractions;
using ICSharpCode.TreeView; using ICSharpCode.TreeView;
using ICSharpCode.TreeView.PlatformAbstractions;
namespace ICSharpCode.ILSpy.TreeNodes namespace ICSharpCode.ILSpy.TreeNodes
{ {
@ -77,7 +78,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
return false; return false;
} }
public override void ActivateItemSecondary(RoutedEventArgs e) public override void ActivateItemSecondary(IPlatformRoutedEventArgs e)
{ {
MainWindow.Instance.SelectNode(this, inNewTabPage: true); MainWindow.Instance.SelectNode(this, inNewTabPage: true);
MainWindow.Instance.Dispatcher.BeginInvoke(DispatcherPriority.Background, (Action)MainWindow.Instance.RefreshDecompiledView); MainWindow.Instance.Dispatcher.BeginInvoke(DispatcherPriority.Background, (Action)MainWindow.Instance.RefreshDecompiledView);

3
ILSpy/TreeNodes/ModuleReferenceTreeNode.cs

@ -21,6 +21,7 @@ using System.Reflection.Metadata;
using ICSharpCode.Decompiler; using ICSharpCode.Decompiler;
using ICSharpCode.Decompiler.Metadata; using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.TreeView.PlatformAbstractions;
namespace ICSharpCode.ILSpy.TreeNodes namespace ICSharpCode.ILSpy.TreeNodes
{ {
@ -69,7 +70,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Icon => Images.Library; public override object Icon => Images.Library;
public override void ActivateItem(System.Windows.RoutedEventArgs e) public override void ActivateItem(IPlatformRoutedEventArgs e)
{ {
var assemblyListNode = parentAssembly.Parent as AssemblyListTreeNode; var assemblyListNode = parentAssembly.Parent as AssemblyListTreeNode;
if (assemblyListNode != null && containsMetadata) if (assemblyListNode != null && containsMetadata)

10
SharpTreeView/PlatformAbstractions/IPlatformDataObject.cs

@ -0,0 +1,10 @@
namespace ICSharpCode.TreeView.PlatformAbstractions
{
public interface IPlatformDataObject
{
bool GetDataPresent(string format);
object GetData(string format);
void SetData(string format, object data);
}
}

7
SharpTreeView/PlatformAbstractions/IPlatformDragDrop.cs

@ -0,0 +1,7 @@
namespace ICSharpCode.TreeView.PlatformAbstractions
{
public interface IPlatformDragDrop
{
XPlatDragDropEffects DoDragDrop(object dragSource, object data, XPlatDragDropEffects allowedEffects);
}
}

8
SharpTreeView/PlatformAbstractions/IPlatformDragEventArgs.cs

@ -0,0 +1,8 @@
namespace ICSharpCode.TreeView.PlatformAbstractions
{
public interface IPlatformDragEventArgs
{
XPlatDragDropEffects Effects { get; set; }
IPlatformDataObject Data { get; }
}
}

7
SharpTreeView/PlatformAbstractions/IPlatformRoutedEventArgs.cs

@ -0,0 +1,7 @@
namespace ICSharpCode.TreeView.PlatformAbstractions
{
public interface IPlatformRoutedEventArgs
{
bool Handled { get; set; }
}
}

29
SharpTreeView/PlatformAbstractions/WpfWindows/WpfWindowsDataObject.cs

@ -0,0 +1,29 @@
using System.Windows;
namespace ICSharpCode.TreeView.PlatformAbstractions.WpfWindows
{
public class WpfWindowsDataObject : IPlatformDataObject
{
private readonly IDataObject _dataObject;
public WpfWindowsDataObject(IDataObject dataObject)
{
_dataObject = dataObject;
}
public object GetData(string format)
{
return _dataObject.GetData(format);
}
public bool GetDataPresent(string format)
{
return _dataObject.GetDataPresent(format);
}
public void SetData(string format, object data)
{
_dataObject.SetData(format, data);
}
}
}

12
SharpTreeView/PlatformAbstractions/WpfWindows/WpfWindowsDragDropManager.cs

@ -0,0 +1,12 @@
using System.Windows;
namespace ICSharpCode.TreeView.PlatformAbstractions.WpfWindows
{
public class WpfWindowsDragDropManager : IPlatformDragDrop
{
public XPlatDragDropEffects DoDragDrop(object dragSource, object data, XPlatDragDropEffects allowedEffects)
{
return (XPlatDragDropEffects)DragDrop.DoDragDrop(dragSource as DependencyObject, data, (DragDropEffects)allowedEffects);
}
}
}

18
SharpTreeView/PlatformAbstractions/WpfWindows/WpfWindowsDragEventArgs.cs

@ -0,0 +1,18 @@
using System.Windows;
namespace ICSharpCode.TreeView.PlatformAbstractions.WpfWindows
{
public class WpfWindowsDragEventArgs : IPlatformDragEventArgs
{
private readonly DragEventArgs _eventArgs;
public WpfWindowsDragEventArgs(DragEventArgs eventArgs)
{
_eventArgs = eventArgs;
}
public XPlatDragDropEffects Effects { get => (XPlatDragDropEffects)_eventArgs.Effects; set => _eventArgs.Effects = (DragDropEffects)value; }
public IPlatformDataObject Data => new WpfWindowsDataObject(_eventArgs.Data);
}
}

16
SharpTreeView/PlatformAbstractions/WpfWindows/WpfWindowsRoutedEventArgs.cs

@ -0,0 +1,16 @@
using System.Windows;
namespace ICSharpCode.TreeView.PlatformAbstractions.WpfWindows
{
public class WpfWindowsRoutedEventArgs : IPlatformRoutedEventArgs
{
private readonly RoutedEventArgs _eventArgs;
public WpfWindowsRoutedEventArgs(RoutedEventArgs eventArgs)
{
_eventArgs = eventArgs;
}
public bool Handled { get => _eventArgs.Handled; set => _eventArgs.Handled = value; }
}
}

36
SharpTreeView/PlatformAbstractions/XPlatDragDropEffects.cs

@ -0,0 +1,36 @@
using System;
namespace ICSharpCode.TreeView.PlatformAbstractions
{
//
// Summary:
// Specifies the effects of a drag-and-drop operation.
[Flags]
public enum XPlatDragDropEffects
{
//
// Summary:
// Scrolling is about to start or is currently occurring in the drop target.
Scroll = int.MinValue,
//
// Summary:
// The data is copied, removed from the drag source, and scrolled in the drop target.
All = -2147483645,
//
// Summary:
// The drop target does not accept the data.
None = 0,
//
// Summary:
// The data is copied to the drop target.
Copy = 1,
//
// Summary:
// The data from the drag source is moved to the drop target.
Move = 2,
//
// Summary:
// The data from the drag source is linked to the drop target.
Link = 4
}
}

28
SharpTreeView/SharpTreeNode.cs

@ -22,9 +22,8 @@ using System.Collections.Specialized;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Windows;
using System.Windows.Input; using ICSharpCode.TreeView.PlatformAbstractions;
using System.Windows.Media;
namespace ICSharpCode.TreeView namespace ICSharpCode.TreeView
{ {
@ -584,7 +583,7 @@ namespace ICSharpCode.TreeView
throw new NotSupportedException(GetType().Name + " does not support deletion"); throw new NotSupportedException(GetType().Name + " does not support deletion");
} }
public virtual IDataObject Copy(SharpTreeNode[] nodes) public virtual IPlatformDataObject Copy(SharpTreeNode[] nodes)
{ {
throw new NotSupportedException(GetType().Name + " does not support copy/paste or drag'n'drop"); throw new NotSupportedException(GetType().Name + " does not support copy/paste or drag'n'drop");
} }
@ -614,25 +613,26 @@ namespace ICSharpCode.TreeView
return false; return false;
} }
public virtual void StartDrag(DependencyObject dragSource, SharpTreeNode[] nodes) public virtual void StartDrag(object dragSource, SharpTreeNode[] nodes, IPlatformDragDrop dragdropManager)
{ {
DragDropEffects effects = DragDropEffects.All; XPlatDragDropEffects effects = XPlatDragDropEffects.All;
if (!nodes.All(n => n.CanDelete())) if (!nodes.All(n => n.CanDelete()))
effects &= ~DragDropEffects.Move; effects &= ~XPlatDragDropEffects.Move;
DragDropEffects result = DragDrop.DoDragDrop(dragSource, Copy(nodes), effects);
if (result == DragDropEffects.Move) XPlatDragDropEffects result = dragdropManager.DoDragDrop(dragSource, Copy(nodes), effects);
if (result == XPlatDragDropEffects.Move)
{ {
foreach (SharpTreeNode node in nodes) foreach (SharpTreeNode node in nodes)
node.DeleteCore(); node.DeleteCore();
} }
} }
public virtual bool CanDrop(DragEventArgs e, int index) public virtual bool CanDrop(IPlatformDragEventArgs e, int index)
{ {
return false; return false;
} }
internal void InternalDrop(DragEventArgs e, int index) internal void InternalDrop(IPlatformDragEventArgs e, int index)
{ {
if (LazyLoading) if (LazyLoading)
{ {
@ -643,7 +643,7 @@ namespace ICSharpCode.TreeView
Drop(e, index); Drop(e, index);
} }
public virtual void Drop(DragEventArgs e, int index) public virtual void Drop(IPlatformDragEventArgs e, int index)
{ {
throw new NotSupportedException(GetType().Name + " does not support Drop()"); throw new NotSupportedException(GetType().Name + " does not support Drop()");
} }
@ -703,14 +703,14 @@ namespace ICSharpCode.TreeView
/// <summary> /// <summary>
/// Gets called when the item is double-clicked. /// Gets called when the item is double-clicked.
/// </summary> /// </summary>
public virtual void ActivateItem(RoutedEventArgs e) public virtual void ActivateItem(IPlatformRoutedEventArgs e)
{ {
} }
/// <summary> /// <summary>
/// Gets called when the item is clicked with the middle mouse button. /// Gets called when the item is clicked with the middle mouse button.
/// </summary> /// </summary>
public virtual void ActivateItemSecondary(RoutedEventArgs e) public virtual void ActivateItemSecondary(IPlatformRoutedEventArgs e)
{ {
} }

14
SharpTreeView/SharpTreeView.cs

@ -28,6 +28,8 @@ using System.Windows.Documents;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Threading; using System.Windows.Threading;
using ICSharpCode.TreeView.PlatformAbstractions.WpfWindows;
namespace ICSharpCode.TreeView namespace ICSharpCode.TreeView
{ {
public class SharpTreeView : ListView public class SharpTreeView : ListView
@ -303,7 +305,7 @@ namespace ICSharpCode.TreeView
if (container != null && Keyboard.Modifiers == ModifierKeys.None && this.SelectedItems.Count == 1 && this.SelectedItem == container.Node) if (container != null && Keyboard.Modifiers == ModifierKeys.None && this.SelectedItems.Count == 1 && this.SelectedItem == container.Node)
{ {
e.Handled = true; e.Handled = true;
container.Node.ActivateItem(e); container.Node.ActivateItem(new WpfWindowsRoutedEventArgs(e));
} }
break; break;
case Key.Space: case Key.Space:
@ -319,7 +321,7 @@ namespace ICSharpCode.TreeView
} }
else else
{ {
container.Node.ActivateItem(e); container.Node.ActivateItem(new WpfWindowsRoutedEventArgs(e));
} }
} }
break; break;
@ -462,7 +464,7 @@ namespace ICSharpCode.TreeView
if (Root != null && !ShowRoot) if (Root != null && !ShowRoot)
{ {
e.Handled = true; e.Handled = true;
Root.CanDrop(e, Root.Children.Count); Root.CanDrop(new WpfWindowsDragEventArgs(e), Root.Children.Count);
} }
} }
@ -473,7 +475,7 @@ namespace ICSharpCode.TreeView
if (Root != null && !ShowRoot) if (Root != null && !ShowRoot)
{ {
e.Handled = true; e.Handled = true;
Root.InternalDrop(e, Root.Children.Count); Root.InternalDrop(new WpfWindowsDragEventArgs(e), Root.Children.Count);
} }
} }
@ -504,7 +506,7 @@ namespace ICSharpCode.TreeView
if (target != null) if (target != null)
{ {
e.Handled = true; e.Handled = true;
target.Node.InternalDrop(e, target.Index); target.Node.InternalDrop(new WpfWindowsDragEventArgs(e), target.Index);
} }
} }
catch (Exception ex) catch (Exception ex)
@ -612,7 +614,7 @@ namespace ICSharpCode.TreeView
if (node != null) if (node != null)
{ {
e.Effects = DragDropEffects.None; e.Effects = DragDropEffects.None;
if (node.CanDrop(e, index)) if (node.CanDrop(new WpfWindowsDragEventArgs(e), index))
{ {
DropTarget target = new DropTarget() { DropTarget target = new DropTarget() {
Item = item, Item = item,

8
SharpTreeView/SharpTreeViewItem.cs

@ -22,6 +22,8 @@ using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
using ICSharpCode.TreeView.PlatformAbstractions.WpfWindows;
namespace ICSharpCode.TreeView namespace ICSharpCode.TreeView
{ {
public class SharpTreeViewItem : ListViewItem public class SharpTreeViewItem : ListViewItem
@ -103,7 +105,7 @@ namespace ICSharpCode.TreeView
var selection = ParentTreeView.GetTopLevelSelection().ToArray(); var selection = ParentTreeView.GetTopLevelSelection().ToArray();
if (Node.CanDrag(selection)) if (Node.CanDrag(selection))
{ {
Node.StartDrag(this, selection); Node.StartDrag(this, selection, new WpfWindowsDragDropManager());
} }
} }
} }
@ -114,7 +116,7 @@ namespace ICSharpCode.TreeView
if (wasDoubleClick) if (wasDoubleClick)
{ {
wasDoubleClick = false; wasDoubleClick = false;
Node.ActivateItem(e); Node.ActivateItem(new WpfWindowsRoutedEventArgs(e));
if (!e.Handled) if (!e.Handled)
{ {
if (!Node.IsRoot || ParentTreeView.ShowRootExpander) if (!Node.IsRoot || ParentTreeView.ShowRootExpander)
@ -135,7 +137,7 @@ namespace ICSharpCode.TreeView
{ {
if (e.ChangedButton == MouseButton.Middle) if (e.ChangedButton == MouseButton.Middle)
{ {
Node.ActivateItemSecondary(e); Node.ActivateItemSecondary(new WpfWindowsRoutedEventArgs(e));
} }
else else
{ {

Loading…
Cancel
Save