private DataObject GetDataObject(FrameworkElement fe) { var data = FindDraggedItem(fe); var ret = new DataObject(DragTypeName(), data); TreeArrange.GetSupplementalFormats(fe)?.AddFormats(ret, data); return(ret); }
private void DragOver(object sender, DragEventArgs e) { if (TreeArrange.AdornmentTarget(sender) is {} droppedOnElement) { if (ExtractDraggedData(e) is not { } droppedData) { DelegateDragOverToSupplementalDrag(sender, e); return; } ; double relativePosition = RelativePosition(e, droppedOnElement); droppedOnElement.Adorn(ComputeAdornerType(relativePosition, HasChildList(droppedOnElement, droppedData))); e.Effects = DragDropEffects.Copy; e.Handled = true; } }
private void Drop(object sender, DragEventArgs e) { if (TreeArrange.AdornmentTarget(sender) is not { } droppedOnElement) { return; } if (ExtractDraggedData(e) is not { } draggedItem) { TrySendSupplementalDropMessage(sender, e); return; } if (TreeArrange.FindDraggedItem(droppedOnElement) is not { } target || target == draggedItem) { return; } if (DroppingItemOnOwnChild(droppedOnElement, draggedItem)) { return; } if (ListFinder.FindParentListContainingData(droppedOnElement, target) is not { } items) { return; } e.Handled = true; e.Effects = ComputeAdornerType(RelativePosition(e, droppedOnElement), HasChildList(droppedOnElement, draggedItem)) switch { DropAdornerKind.Top => InsertDroppedItemIntoTarget(items, target, draggedItem, 0), DropAdornerKind.Bottom => InsertDroppedItemIntoTarget(items, target, draggedItem, 1), _ => InsertDroppedItemIntoTarget( ListFinder.FindChildListToHoldData(droppedOnElement, draggedItem) ?? items, null, draggedItem, 0) }; }
private IDropTarget?SupplementalDropTarget() => TreeArrange.GetSupplementalDropTarget(rootElt);