Example #1
0
    private static void DropTarget_PreviewDragOver(object sender, DragEventArgs e)
    {
      var itemsControl = sender as ItemsControl;
      var dropInfo = new DropInfo(sender, e, _dragInfo);
      IDropTarget dropHandler = GetDropHandler((UIElement)sender);

      if (dropHandler != null)
        dropHandler.DragOver(dropInfo);
      else
        DefaultDropHandler.DragOver(dropInfo);

      // Update the drag adorner.
      if (dropInfo.Effects != DragDropEffects.None)
      {
        if (DragAdorner == null && _dragInfo != null)
        {
          CreateDragAdorner();
        }

        if (DragAdorner != null)
        {
          DragAdorner.MousePosition = e.GetPosition(DragAdorner.AdornedElement);
          DragAdorner.InvalidateVisual();
        }
      }
      else
      {
        DragAdorner = null;
      }

      // 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 =
            (UIElement)itemsControl.GetVisualDescendant<ItemsPresenter>() ??
            (UIElement)itemsControl.GetVisualDescendant<ScrollContentPresenter>();

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

          if (DropTargetAdorner != null)
          {
            DropTargetAdorner.DropInfo = dropInfo;
            DropTargetAdorner.InvalidateVisual();
          }
        }
      }

      e.Effects = dropInfo.Effects;
      e.Handled = true;

      Scroll((DependencyObject)sender, e);
    }
Example #2
0
    private static void DropTarget_PreviewDrop(object sender, DragEventArgs e)
    {
      var dropInfo = new DropInfo(sender, e, _dragInfo);
      IDropTarget dropHandler = GetDropHandler((UIElement)sender) ?? DefaultDropHandler;
      IDragSource dragHandler = GetDragHandler((UIElement)sender) ?? DefaultDragHandler;

      DragAdorner = null;
      DropTargetAdorner = null;
      dropHandler.Drop(dropInfo);
      dragHandler.Dropped(dropInfo);
      e.Handled = true;
    }
Example #3
0
        private static void DropTarget_PreviewDragOver(object sender, DragEventArgs e)
        {
            var         itemsControl = sender as ItemsControl;
            var         dropInfo     = new DropInfo(sender, e, _dragInfo);
            IDropTarget dropHandler  = GetDropHandler((UIElement)sender);

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

            // Update the drag adorner.
            if (dropInfo.Effects != DragDropEffects.None)
            {
                if (DragAdorner == null && _dragInfo != null)
                {
                    CreateDragAdorner();
                }

                if (DragAdorner != null)
                {
                    DragAdorner.MousePosition = e.GetPosition(DragAdorner.AdornedElement);
                    DragAdorner.InvalidateVisual();
                }
            }
            else
            {
                DragAdorner = null;
            }

            // 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 =
                    (UIElement)itemsControl.GetVisualDescendant <ItemsPresenter>() ??
                    (UIElement)itemsControl.GetVisualDescendant <ScrollContentPresenter>();

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

                    if (DropTargetAdorner != null)
                    {
                        DropTargetAdorner.DropInfo = dropInfo;
                        DropTargetAdorner.InvalidateVisual();
                    }
                }
            }

            e.Effects = dropInfo.Effects;
            e.Handled = true;

            Scroll((DependencyObject)sender, e);
        }