diff --git a/GongSolutions.Wpf.DragDrop/DropTargetInsertionAdorner.cs b/GongSolutions.Wpf.DragDrop/DropTargetInsertionAdorner.cs index 56361a1e..7d581d0b 100644 --- a/GongSolutions.Wpf.DragDrop/DropTargetInsertionAdorner.cs +++ b/GongSolutions.Wpf.DragDrop/DropTargetInsertionAdorner.cs @@ -38,7 +38,7 @@ protected override void OnRender(DrawingContext drawingContext) if (targetGroup != null && targetGroup.IsBottomLevel && this.DropInfo.InsertPosition.HasFlag(RelativeInsertPosition.AfterTargetItem)) { var indexOf = targetGroup.Items.IndexOf(this.DropInfo.TargetItem); lastItemInGroup = indexOf == targetGroup.ItemCount - 1; - if (lastItemInGroup) { + if (lastItemInGroup && this.DropInfo.InsertIndex != itemParent.Items.Count) { index--; } } diff --git a/GongSolutions.Wpf.DragDrop/Utilities/ItemsControlExtensions.cs b/GongSolutions.Wpf.DragDrop/Utilities/ItemsControlExtensions.cs index 7ed7acc7..5e123b78 100644 --- a/GongSolutions.Wpf.DragDrop/Utilities/ItemsControlExtensions.cs +++ b/GongSolutions.Wpf.DragDrop/Utilities/ItemsControlExtensions.cs @@ -25,6 +25,26 @@ public static CollectionViewGroup FindGroup(this ItemsControl itemsControl, Poin if (element != null) { var groupItem = element.GetVisualAncestor(); + // drag after last item - get group of it + if (itemsControl.Items.Groups != null && groupItem == null && itemsControl.Items.Count > 0) + { + var lastItem = itemsControl.ItemContainerGenerator.ContainerFromItem(itemsControl.Items.GetItemAt(itemsControl.Items.Count - 1)) as FrameworkElement; + if (lastItem != null) + { + var itemEndpoint = lastItem.PointToScreen(new Point(lastItem.ActualWidth, lastItem.ActualHeight)); + var positionToScreen = itemsControl.PointToScreen(position); + switch (itemsControl.GetItemsPanelOrientation()) + { + case Orientation.Horizontal: + // assume LeftToRight + groupItem = itemEndpoint.X <= positionToScreen.X ? lastItem.GetVisualAncestor() : null; + break; + case Orientation.Vertical: + groupItem = itemEndpoint.Y <= positionToScreen.Y ? lastItem.GetVisualAncestor() : null; + break; + } + } + } if (groupItem != null) { return groupItem.Content as CollectionViewGroup; }