7
7
using System . Windows ;
8
8
using GongSolutions . Wpf . DragDrop . Utilities ;
9
9
using System . Windows . Controls ;
10
- using System . Windows . Input ;
11
10
12
11
namespace GongSolutions . Wpf . DragDrop
13
12
{
@@ -16,6 +15,27 @@ namespace GongSolutions.Wpf.DragDrop
16
15
/// </summary>
17
16
public class DefaultDropHandler : IDropTarget
18
17
{
18
+ /// <summary>
19
+ /// Determines whether the data of the drag drop action should be copied otherwise moved.
20
+ /// </summary>
21
+ /// <param name="dropInfo">The DropInfo with a valid DragInfo.</param>
22
+ public static bool ShouldCopyData ( IDropInfo dropInfo )
23
+ {
24
+ // default should always the move action/effect
25
+ if ( dropInfo == null || dropInfo . DragInfo == null )
26
+ {
27
+ return false ;
28
+ }
29
+ var copyData = ( ( dropInfo . DragInfo . DragDropCopyKeyState != default ( DragDropKeyStates ) ) && dropInfo . KeyStates . HasFlag ( dropInfo . DragInfo . DragDropCopyKeyState ) )
30
+ || dropInfo . DragInfo . DragDropCopyKeyState . HasFlag ( DragDropKeyStates . LeftMouseButton ) ;
31
+ copyData = copyData
32
+ //&& (dropInfo.DragInfo.VisualSource != dropInfo.VisualTarget)
33
+ && ! ( dropInfo . DragInfo . SourceItem is HeaderedContentControl )
34
+ && ! ( dropInfo . DragInfo . SourceItem is HeaderedItemsControl )
35
+ && ! ( dropInfo . DragInfo . SourceItem is ListBoxItem ) ;
36
+ return copyData ;
37
+ }
38
+
19
39
/// <summary>
20
40
/// Updates the current drag state.
21
41
/// </summary>
@@ -28,13 +48,7 @@ public class DefaultDropHandler : IDropTarget
28
48
public virtual void DragOver ( IDropInfo dropInfo )
29
49
{
30
50
if ( CanAcceptData ( dropInfo ) ) {
31
- // default should always the move action/effect
32
- var copyData = ( dropInfo . DragInfo . DragDropCopyKeyState != default ( DragDropKeyStates ) ) && dropInfo . KeyStates . HasFlag ( dropInfo . DragInfo . DragDropCopyKeyState )
33
- //&& (dropInfo.DragInfo.VisualSource != dropInfo.VisualTarget)
34
- && ! ( dropInfo . DragInfo . SourceItem is HeaderedContentControl )
35
- && ! ( dropInfo . DragInfo . SourceItem is HeaderedItemsControl )
36
- && ! ( dropInfo . DragInfo . SourceItem is ListBoxItem ) ;
37
- dropInfo . Effects = copyData ? DragDropEffects . Copy : DragDropEffects . Move ;
51
+ dropInfo . Effects = ShouldCopyData ( dropInfo ) ? DragDropEffects . Copy : DragDropEffects . Move ;
38
52
var isTreeViewItem = dropInfo . InsertPosition . HasFlag ( RelativeInsertPosition . TargetItemCenter ) && dropInfo . VisualTargetItem is TreeViewItem ;
39
53
dropInfo . DropTargetAdorner = isTreeViewItem ? DropTargetAdorners . Highlight : DropTargetAdorners . Insert ;
40
54
}
@@ -73,12 +87,7 @@ public virtual void Drop(IDropInfo dropInfo)
73
87
var destinationList = dropInfo . TargetCollection . TryGetList ( ) ;
74
88
var data = ExtractData ( dropInfo . Data ) ;
75
89
76
- // default should always the move action/effect
77
- var copyData = ( dropInfo . DragInfo . DragDropCopyKeyState != default ( DragDropKeyStates ) ) && dropInfo . KeyStates . HasFlag ( dropInfo . DragInfo . DragDropCopyKeyState )
78
- //&& (dropInfo.DragInfo.VisualSource != dropInfo.VisualTarget)
79
- && ! ( dropInfo . DragInfo . SourceItem is HeaderedContentControl )
80
- && ! ( dropInfo . DragInfo . SourceItem is HeaderedItemsControl )
81
- && ! ( dropInfo . DragInfo . SourceItem is ListBoxItem ) ;
90
+ var copyData = ShouldCopyData ( dropInfo ) ;
82
91
if ( ! copyData )
83
92
{
84
93
var sourceList = dropInfo . DragInfo . SourceCollection . TryGetList ( ) ;
0 commit comments