private void ListView_PreviewMouseMove(object x) { if (x is MouseEventArguments mouseArgs) { if (mouseArgs.E.LeftButton == MouseButtonState.Pressed) { var mousePos = mouseArgs.E.GetPosition(null); var diff = _startingPoint - mousePos; if (Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance || Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance) { if (mouseArgs.Sender is ListView listView) { var listViewItem = TreeHelper.FindAnchestor <ListViewItem>((DependencyObject)mouseArgs.E.OriginalSource); if (listViewItem != null) { var eCigarette = (ECigarette)listView.ItemContainerGenerator.ItemFromContainer(listViewItem); if (eCigarette != null) { _startingIndex = ECigarettes.IndexOf(eCigarette); DataObject dragData = new DataObject("CustomFormat", eCigarette); DragDrop.DoDragDrop(listViewItem, dragData, DragDropEffects.Move); } } } } } } }
private void ListView_DragEnter(object x) { Debug.WriteLine("ListView_DragEnter"); if (x is DragEventArguments dragArgs) { if (!dragArgs.E.Data.GetDataPresent("CustomFormat") || dragArgs.Sender == dragArgs.E.Source) { dragArgs.E.Effects = DragDropEffects.None; if (dragArgs.Sender is ListView listView) { var currentListViewItem = TreeHelper.FindAnchestor <ListViewItem>((DependencyObject)dragArgs.E.OriginalSource); if (currentListViewItem != null) { _currentIndex = ECigarettes.IndexOf(currentListViewItem.Content as ECigarette); int lengthOfCollection = ECigarettes.Count - 1; if (_currentIndex > _startingIndex && _currentIndex != 0 && _currentIndex + 1 <= lengthOfCollection) { var nextContainer = (ListViewItem)listView.ItemContainerGenerator.ContainerFromIndex(_currentIndex + 1); _currentListViewItem = nextContainer; _adorner = new DashedRectangleAdorner(_currentListViewItem); AdornerLayer.GetAdornerLayer(_currentListViewItem).Add(_adorner); } else { _currentListViewItem = currentListViewItem; _adorner = new DashedRectangleAdorner(currentListViewItem); AdornerLayer.GetAdornerLayer(_currentListViewItem).Add(_adorner); } } } } } }