private void List_DragOver(object sender, DragEventArgs e) { e.Effects = DragDropEffects.None; Tuple <ListViewItem, List <CodeMember> > dropTargetInfo = this.GetDropTargetInfo(e); if (dropTargetInfo != null) { e.Effects = e.AllowedEffects; LineDropTargetAdorner adorner = this.GetAdorner(true); ListViewItem item = dropTargetInfo.Item1; double position = this.list.PointFromScreen(item.PointToScreen(default(Point))).Y; position += IsInBottomHalfOfItem(e, item) ? item.ActualHeight : -1; // Our adorner won't be clipped, so we need to draw it short enough to not overlap the scroll bar, etc. ScrollViewer viewer = GetVisualChild <ScrollViewer>(this.list); double scrollBarWidth = viewer.ComputedVerticalScrollBarVisibility == Visibility.Visible ? SystemParameters.VerticalScrollBarWidth : 0; double width = Math.Min(item.ActualWidth, viewer.ActualWidth - scrollBarWidth); adorner.Show(position, width); } else { LineDropTargetAdorner adorner = this.GetAdorner(false); if (adorner != null) { adorner.Hide(); } } // We have to indicate that we've handled the DragOver and set the desired Effects. // This tells the system it doesn't need to use the default DragOver handler, and it lets // the default GiveFeedback handler show the proper cursor when dropping isn't allowed. e.Handled = true; }
private void ClearDragMembers() { this.dragStart = null; LineDropTargetAdorner adorner = this.GetAdorner(false); if (adorner != null) { AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(this.list); adornerLayer.Remove(adorner); } }
private void List_DragOver(object sender, DragEventArgs e) { e.Effects = DragDropEffects.None; Tuple <ListViewItem, List <CodeMember> > dropTargetInfo = this.GetDropTargetInfo(e); if (dropTargetInfo != null) { e.Effects = e.AllowedEffects; LineDropTargetAdorner adorner = this.GetAdorner(true); ListViewItem item = dropTargetInfo.Item1; double position = this.list.PointFromScreen(item.PointToScreen(default)).Y;
private LineDropTargetAdorner GetAdorner(bool createIfNecessary) { AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(this.list); LineDropTargetAdorner result = (adornerLayer.GetAdorners(this.list) ?? Enumerable.Empty <Adorner>()) .OfType <LineDropTargetAdorner>().FirstOrDefault(); if (result == null && createIfNecessary) { result = new LineDropTargetAdorner(this.list); adornerLayer.Add(result); } return(result); }