Exemple #1
0
        internal DropTargetAdorner CreateTest(Type type, UIElement adornedElement)
        {
            DropTargetAdorner result = DropTargetAdorner.Create(type, adornedElement);

            return(result);
            // TODO: add assertions to method DropTargetAdornerTest.CreateTest(Type, UIElement)
        }
Exemple #2
0
 private static void DragSourceOnQueryContinueDrag(object sender, QueryContinueDragEventArgs e)
 {
     if (e.Action == DragAction.Cancel || e.EscapePressed)
     {
         DragAdorner          = null;
         EffectAdorner        = null;
         DropTargetAdorner    = null;
         Mouse.OverrideCursor = null;
     }
 }
Exemple #3
0
        private static void OnPreviewDrop(object sender, DragEventArgs e)
        {
            var dropInfo    = new DropInfo(sender, e, _dragInfo, Format.Name);
            var dropHandler = GetDropHandler((UIElement)sender);

            DragAdorner       = null;
            DropTargetAdorner = null;

            if (dropHandler != null)
            {
                dropHandler.Drop(dropInfo);
            }
            else
            {
                DefaultDropHandler.Drop(dropInfo);
            }

            e.Handled = true;
        }
Exemple #4
0
        private static void DropTargetOnDrop(object sender, DragEventArgs e, EventType eventType)
        {
            var dragInfo    = m_DragInfo;
            var dropInfo    = new DropInfo(sender, e, dragInfo, eventType);
            var dropHandler = TryGetDropHandler(dropInfo, sender as UIElement);
            var dragHandler = TryGetDragHandler(dragInfo, sender as UIElement);

            DragAdorner       = null;
            EffectAdorner     = null;
            DropTargetAdorner = null;

            dropHandler.DragOver(dropInfo);
            dropHandler.Drop(dropInfo);
            dragHandler.Dropped(dropInfo);

            e.Effects = dropInfo.Effects;
            e.Handled = !dropInfo.NotHandled;

            Mouse.OverrideCursor = null;
        }
Exemple #5
0
        private static void UpdateTargetDropAdorner(DependencyObject target, IDropInfo dropInfo)
        {
            UIElement adornedElement = target.GetVisualDescendent <ItemsPresenter>();

            if (dropInfo.DropTargetAdorner == null)
            {
                DropTargetAdorner = null;
            }
            else if (!dropInfo.DropTargetAdorner.IsInstanceOfType(DropTargetAdorner))
            {
                DropTargetAdorner = DropTargetAdorner.Create(dropInfo.DropTargetAdorner, adornedElement);
            }

            if (DropTargetAdorner == null)
            {
                return;
            }

            DropTargetAdorner.DropInfo = dropInfo;
            DropTargetAdorner.InvalidateVisual();
        }
Exemple #6
0
        private static void DropTargetOnDragOver(object sender, DragEventArgs e, EventType eventType)
        {
            var elementPosition = e.GetPosition((IInputElement)sender);

            var dragInfo     = m_DragInfo;
            var dropInfo     = new DropInfo(sender, e, dragInfo, eventType);
            var dropHandler  = TryGetDropHandler(dropInfo, sender as UIElement);
            var itemsControl = dropInfo.VisualTarget;

            dropHandler.DragOver(dropInfo);

            if (DragAdorner == null && dragInfo != null)
            {
                CreateDragAdorner(dropInfo);
            }

            // Moves DragAdorner following with mouse point
            DragAdorner?.Move(e.GetPosition(DragAdorner.AdornedElement), dragInfo != null ? GetDragMouseAnchorPoint(dragInfo.VisualSource) : default(Point), ref _adornerMousePosition, ref _adornerSize);

            Scroll(dropInfo, e);

            if (HitTestUtilities.HitTest4Type <ScrollBar>(sender, elementPosition) ||
                HitTestUtilities.HitTest4GridViewColumnHeader(sender, elementPosition) ||
                HitTestUtilities.HitTest4DataGridTypesOnDragOver(sender, elementPosition))
            {
                e.Effects = DragDropEffects.None;
                e.Handled = true;
                return;
            }

            // If the target is an ItemsControl then update the drop target adorner.
            if (itemsControl != null)
            {
                // Display the adorner in the control's ItemsPresenter. If there is no
                // ItemsPresenter provided by the style, try getting hold of a
                // ScrollContentPresenter and using that.
                UIElement adornedElement = null;
                if (itemsControl is TabControl)
                {
                    adornedElement = itemsControl.FindVisualChild <TabPanel>();
                }
                else if (itemsControl is DataGrid || (itemsControl as ListView)?.View is GridView)
                {
                    adornedElement = itemsControl.FindVisualChild <ScrollContentPresenter>() ?? itemsControl.FindVisualChild <ItemsPresenter>() ?? itemsControl;
                }
                else
                {
                    adornedElement = itemsControl.FindVisualChild <ItemsPresenter>() ?? itemsControl.FindVisualChild <ScrollContentPresenter>() ?? itemsControl;
                }

                if (adornedElement != null)
                {
                    if (dropInfo.DropTargetAdorner == null)
                    {
                        DropTargetAdorner = null;
                    }
                    else if (!dropInfo.DropTargetAdorner.IsInstanceOfType(DropTargetAdorner))
                    {
                        DropTargetAdorner = DropTargetAdorner.Create(dropInfo.DropTargetAdorner, adornedElement, dropInfo);
                    }

                    var adorner = DropTargetAdorner;
                    if (adorner != null)
                    {
                        var adornerBrush = GetDropTargetAdornerBrush(dropInfo.VisualTarget);
                        if (adornerBrush != null)
                        {
                            adorner.Pen.Brush = adornerBrush;
                        }
                        adorner.DropInfo = dropInfo;
                        adorner.InvalidateVisual();
                    }
                }
            }

            // Set the drag effect adorner if there is one
            if (dragInfo != null && (EffectAdorner == null || EffectAdorner.Effects != dropInfo.Effects))
            {
                CreateEffectAdorner(dropInfo);
            }

            EffectAdorner?.Move(e.GetPosition(EffectAdorner.AdornedElement), default(Point), ref _effectAdornerMousePosition, ref _effectAdornerSize);

            e.Effects = dropInfo.Effects;
            e.Handled = !dropInfo.NotHandled;

            if (!dropInfo.IsSameDragDropContextAsSource)
            {
                e.Effects = DragDropEffects.None;
            }
        }
Exemple #7
0
 /// <summary>
 /// Raise when dragging item leave drop target control
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private static void DropTargetOnDragLeave(object sender, DragEventArgs e)
 {
     DragAdorner       = null;
     EffectAdorner     = null;
     DropTargetAdorner = null;
 }
Exemple #8
0
 public void DetachTest([PexAssumeNotNull] DropTargetAdorner target)
 {
     target.Detach();
     // TODO: add assertions to method DropTargetAdornerTest.DetachTest(DropTargetAdorner)
 }
Exemple #9
0
 private static void OnPreviewDragLeave(object sender, DragEventArgs e)
 {
     DragAdorner       = null;
     DropTargetAdorner = null;
 }