Exemple #1
0
        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;
        }
Exemple #2
0
        private void ClearDragMembers()
        {
            this.dragStart = null;
            LineDropTargetAdorner adorner = this.GetAdorner(false);

            if (adorner != null)
            {
                AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(this.list);
                adornerLayer.Remove(adorner);
            }
        }
Exemple #3
0
        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;
Exemple #4
0
        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);
        }