void listView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (this.IsMouseOverScrollbar) { // 4/13/2007 - Set the flag to false when cursor is over scrollbar. this.canInitiateDrag = false; return; } int index = this.IndexUnderDragCursor; this.canInitiateDrag = index > -1; if (this.canInitiateDrag) { // Remember the location and index of the ListViewItem the user clicked on for later. this.ptMouseDown = MouseUtilities.GetMousePosition(this.listView); this.indexToSelect = index; } else { this.ptMouseDown = new Point(-10000, -10000); this.indexToSelect = -1; } }
bool IsMouseOver(Visual target) { // We need to use MouseUtilities to figure out the cursor // coordinates because, during a drag-drop operation, the WPF // mechanisms for getting the coordinates behave strangely. Rect bounds = VisualTreeHelper.GetDescendantBounds(target); Point mousePos = MouseUtilities.GetMousePosition(target); return(bounds.Contains(mousePos)); }
void UpdateDragAdornerLocation() { if (this.dragAdorner != null) { Point ptCursor = MouseUtilities.GetMousePosition(this.ListView); double left = ptCursor.X - this.ptMouseDown.X; // 4/13/2007 - Made the top offset relative to the item being dragged. ListViewItem itemBeingDragged = this.GetListViewItem(this.indexToSelect); Point itemLoc = itemBeingDragged.TranslatePoint(new Point(0, 0), this.ListView); double top = itemLoc.Y + ptCursor.Y - this.ptMouseDown.Y; this.dragAdorner.SetOffsets(left, top); } }
AdornerLayer InitializeAdornerLayer(ListViewItem itemToDrag) { // Create a brush which will paint the ListViewItem onto // a visual in the adorner layer. VisualBrush brush = new VisualBrush(itemToDrag); // Create an element which displays the source item while it is dragged. this.dragAdorner = new DragAdorner(this.listView, itemToDrag.RenderSize, brush); // Set the drag adorner's opacity. this.dragAdorner.Opacity = this.DragAdornerOpacity; AdornerLayer layer = AdornerLayer.GetAdornerLayer(this.listView); layer.Add(dragAdorner); // Save the location of the cursor when the left mouse button was pressed. this.ptMouseDown = MouseUtilities.GetMousePosition(this.listView); return(layer); }