public static void OnDragOver(TreeViewItemEx tvItem, DragEventArgs e) { //System.Diagnostics.Debug.WriteLine($"DragOver: {tvItem.Item}"); if (dropInfo != null && dropInfo.CouldHadleDrop(e)) { dropInfo.UpdateInsertPosition(e); dropInfo.UpdateTargetCollectionAndIndex(); if (dropInfo.CanAcceptData(DropInfo.ExtractDropData(dragInfo, e))) { if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) { e.Effects = DragDropEffects.Copy; } else { e.Effects = DragDropEffects.Move; } } else { e.Effects = DragDropEffects.None; } dropInfo.Effects = e.Effects; e.Handled = true; } }
public static void HandleDropForTarget(DragDropEffects result, DragEventArgs e = null) { System.Diagnostics.Debug.WriteLine($"HandleDropForTarget: {dropInfo.TargetItem.Item}"); IEnumerable <CmdBase> data = DropInfo.ExtractDropData(dragInfo, e); if (dropInfo.CanAcceptData(data) && (result.HasFlag(DragDropEffects.Move) || result.HasFlag(DragDropEffects.Copy))) { var idx = dropInfo.InsertIndex; if (result.HasFlag(DragDropEffects.Copy)) { data = data.Select(cmd => cmd.Copy()); } var dataList = data.ToList(); var souldDeselctItem = dropInfo.InsertPosition.HasFlag(DropInfo.RelativInsertPosition.IntoTargetItem) && dropInfo.TargetItem.Item is CmdContainer con && !con.IsExpanded; if (dataList.Count > 0) { ToolWindowHistory.SaveState(); } foreach (var sourceItem in dataList) { if (souldDeselctItem) { sourceItem.IsSelected = false; } dropInfo.TargetContainer.Insert(idx++, sourceItem); } var focusItem = dragInfo?.DirectSourceItem ?? dataList.FirstOrDefault(); var selectItemCommand = dropInfo.TargetItem.ParentTreeView.SelectItemCommand; if (souldDeselctItem) { selectItemCommand.SafeExecute(dropInfo.TargetItem.Item); } else if (selectItemCommand.SafeExecute(focusItem)) { foreach (var sourceItem in dataList) { sourceItem.IsSelected = true; } } } else { if (e != null) { e.Effects = DragDropEffects.None; } } dropInfo?.DropTargetAdorner?.Detach(); dropInfo = null; }
public static void OnDragOver(TreeViewItemEx tvItem, DragEventArgs e) { //System.Diagnostics.Debug.WriteLine($"DragOver: {tvItem.Item}"); if (dropInfo == null) { dropInfo = new DropInfo(); } if (dropInfo.CouldHadleDrop(e)) { // set the target item, this also initializes the DropTargetAdorner dropInfo.TargetItem = tvItem; // update data related to the current mouse position and the target item dropInfo.UpdateInsertPosition(e); dropInfo.UpdateTargetContainerAndIndex(); // set the drop mode Copy|Move|None if (dropInfo.CanAcceptData(DropInfo.ExtractDropData(dragInfo, e))) { if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) { e.Effects = DragDropEffects.Copy; } else { e.Effects = DragDropEffects.Move; } } else { e.Effects = DragDropEffects.None; } // this controls the adorner dropInfo.Effects = e.Effects; e.Handled = true; } }