Exemple #1
0
            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);