private static void OnDropTargetAdvisorChanged(DependencyObject depObj,
                                                       DependencyPropertyChangedEventArgs args)
        {
            UIElement targetElt = depObj as UIElement;

            if (args.NewValue != null && args.OldValue == null)
            {
                targetElt.PreviewDragEnter += DropTarget_PreviewDragEnter;
                targetElt.PreviewDragOver  += DropTarget_PreviewDragOver;
                targetElt.PreviewDragLeave += DropTarget_PreviewDragLeave;
                targetElt.PreviewDrop      += DropTarget_PreviewDrop;
                targetElt.AllowDrop         = true;

                // Set the Drag source UI
                IDropTargetAdvisor advisor = args.NewValue as IDropTargetAdvisor;
                advisor.TargetUI = targetElt;
            }
            else if (args.NewValue == null && args.OldValue != null)
            {
                targetElt.PreviewDragEnter -= DropTarget_PreviewDragEnter;
                targetElt.PreviewDragOver  -= DropTarget_PreviewDragOver;
                targetElt.PreviewDragLeave -= DropTarget_PreviewDragLeave;
                targetElt.PreviewDrop      -= DropTarget_PreviewDrop;
                targetElt.AllowDrop         = false;
            }
        }
Esempio n. 2
0
        /// <summary>
        ///     Handles the PreviewDragOver event of the DropTarget control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.Windows.DragEventArgs" /> instance containing the event data.</param>
        private static void DropTargetPreviewDragOver(object sender, DragEventArgs e)
        {
            Debug.Assert(sender is UIElement, "Awaiting sender of type UIElement");
            // Get the current drop target advisor
            CurrentDropTargetAdvisor = GetDropTargetAdvisor((DependencyObject)sender);

            UpdateEffects(e);

            // Update position of the preview Adorner
            adornerPosition = e.GetPosition((UIElement)sender);
            PositionAdorner();

            // Let the target do some stuff -----------------------
            var dropPoint = e.GetPosition((UIElement)sender);

            // Calculate displacement for (Left, Top)
            var offset = e.GetPosition(overlayElt);

            dropPoint.X = dropPoint.X - offset.X;
            dropPoint.Y = dropPoint.Y - offset.Y;

            CurrentDropTargetAdvisor.OnDropQuery(e.Data, dropPoint);

            e.Handled = true;
        }
Esempio n. 3
0
        private static bool UpdateEffects(object uobject, DragEventArgs e)
        {
            IDropTargetAdvisor advisor = GetDropTargetAdvisor(uobject as DependencyObject);

            if (advisor.IsValidDataObject(e.Data) == false)
            {
                return(false);
            }

            if ((e.AllowedEffects & DragDropEffects.Move) == 0 &&
                (e.AllowedEffects & DragDropEffects.Copy) == 0)
            {
                e.Effects = DragDropEffects.None;
                return(true);
            }

            if ((e.AllowedEffects & DragDropEffects.Move) != 0 &&
                (e.AllowedEffects & DragDropEffects.Copy) != 0)
            {
                if ((e.KeyStates & DragDropKeyStates.ControlKey) != 0)
                {
                }

                e.Effects = ((e.KeyStates & DragDropKeyStates.ControlKey) != 0) ?
                            DragDropEffects.Copy : DragDropEffects.Move;
            }

            return(true);
        }
Esempio n. 4
0
        static void CreatePreviewAdorner(object sender, DragEventArgs e)
        {
            // Set the Drag source UI
            IDropTargetAdvisor adv = GetDropTargetAdvisor(sender as FrameworkElement);

            adv.TargetUI = sender as UIElement;

            // get the data
            // get the UIFeedback
            UIFeedback = adv.GetVisualFeedback(e.Data);
            DoubleAnimation anim = new DoubleAnimation(0.75, new Duration(TimeSpan.FromMilliseconds(500)));

            anim.From           = 0.25;
            anim.AutoReverse    = true;
            anim.RepeatBehavior = RepeatBehavior.Forever;
            UIFeedback.BeginAnimation(UIElement.OpacityProperty, anim);
            UIFeedback.IsHitTestVisible = false;

            // add it to the adornment layer
            AdornerLayer layer = AdornerLayer.GetAdornerLayer(sender as UIElement);

            Overlay = new DropPreviewAdorner(UIFeedback, sender as UIElement, layer);
            layer.Add(Overlay);
            Overlay.Location = GetOverlaypoint(sender, e);
        }
Esempio n. 5
0
        static bool UpdateEffects(object sender, DragEventArgs e)
        {
            IDropTargetAdvisor advisor = GetDropTargetAdvisor(sender as FrameworkElement);

            if (!advisor.IsValidDataObject(e.Data))
            {
                return(false);
            }

            // TODO: cope with Link, Scroll
            if ((e.AllowedEffects & DragDropEffects.Move) == 0 &&
                (e.AllowedEffects & DragDropEffects.Copy) == 0)
            {
                e.Effects = DragDropEffects.None;
                return(false);
            }

            if ((e.AllowedEffects & DragDropEffects.Move) != 0)
            {
                e.Effects = DragDropEffects.Move;
            }

            if ((e.AllowedEffects & DragDropEffects.Copy) != 0)
            {
                if ((e.AllowedEffects & DragDropEffects.Move) == 0 || (e.KeyStates & DragDropKeyStates.ControlKey) != 0)
                {
                    e.Effects = DragDropEffects.Copy;
                }
            }

            return(true);
        }
Esempio n. 6
0
        /// <summary>
        ///     Handles the PreviewDragLeave event of the DropTarget control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.Windows.DragEventArgs" /> instance containing the event data.</param>
        private static void DropTargetPreviewDragLeave(object sender, DragEventArgs e)
        {
            UpdateEffects(e);

            RemovePreviewAdorner();

            // Get the current drop target advisor
            CurrentDropTargetAdvisor = GetDropTargetAdvisor((DependencyObject)sender);
            CurrentDropTargetAdvisor.OnLeaveDropZone(e.Data);

            e.Handled = true;
        }
Esempio n. 7
0
        /// <summary>
        /// Called when the input system reports an underlying drag event with drop area element as the drag target.
        /// </summary>
        /// <param name="sender">Drop area element.</param>
        /// <param name="e">Contains arguments relevant to all drag-and-drop events.</param>
        private static void DropTargetPreviewDragEnter(object sender, DragEventArgs e)
        {
            currentTargetAdvisor = GetDropTargetAdvisor(sender as DependencyObject);

            if (UpdateEffects((UIElement)sender, e) == false)
            {
                return;
            }

            Point point = CalculateAdornerOffset(e);

            CreatePreviewAdorner(point.X, point.Y);

            e.Handled = true;
        }
        private static void DropTarget_PreviewDragEnter(object sender, DragEventArgs e)
        {
            // Get the current drop target advisor
            CurrentDropTargetAdvisor = GetDropTargetAdvisor(sender as DependencyObject);

            UpdateEffects(e);

            // Setup the preview Adorner
            _offsetPoint = new Point();
            if (CurrentDropTargetAdvisor.ApplyMouseOffset && e.Data.GetData(DragOffsetFormat) != null)
            {
                _offsetPoint = (Point)e.Data.GetData(DragOffsetFormat);
            }
            CreatePreviewAdorner(sender as UIElement, e.Data);

            e.Handled = true;
        }
Esempio n. 9
0
        private static void DropTargetPreviewDrop(object sender, DragEventArgs e)
        {
            if (UpdateEffects(sender, e) == false)
            {
                return;
            }

            IDropTargetAdvisor advisor = GetDropTargetAdvisor(sender as DependencyObject);
            Point dropPoint            = e.GetPosition(sender as UIElement);

            // Calculate displacement for (Left, Top)
            Point offset = e.GetPosition(s_OverlayElement);

            dropPoint.X = dropPoint.X - offset.X;
            dropPoint.Y = dropPoint.Y - offset.Y;

            advisor.OnDropCompleted(e.Data, dropPoint);
            RemovePreviewAdorner();
            s_OffsetPoint = new Point(0, 0);
        }
Esempio n. 10
0
        private static void DropTarget_PreviewDragEnter(object sender, DragEventArgs e)
        {
            // Get the current drop target advisor
            CurrentDropTargetAdvisor = GetDropTargetAdvisor(sender as DependencyObject);

            if (UpdateEffects(sender, e) == false)
            {
                return;
            }

            // Setup the preview Adorner
            UIElement feedbackUI = CurrentDropTargetAdvisor.GetVisualFeedback(e.Data);

            _offsetPoint = CurrentDropTargetAdvisor.ApplyMouseOffset
                                        ? (Point)e.Data.GetData(DragOffsetFormat)
                                        :
                           new Point();
            CreatePreviewAdorner(sender as UIElement, feedbackUI);

            e.Handled = true;
        }
 public static void SetDropTargetAdvisor(DependencyObject depObj, IDropTargetAdvisor advisor)
 {
     depObj.SetValue(DropTargetAdvisorProperty, advisor);
 }
Esempio n. 12
0
 public static void SetDropTargetAdvisor(DependencyObject depObj,
                                         IDropTargetAdvisor advisor)
 {
     depObj.SetValue(DropTargetAdvisorProperty, advisor);
 }
Esempio n. 13
0
        private static void DropTarget_PreviewDragEnter(object sender, DragEventArgs e)
        {
            // Get the current drop target advisor
            CurrentDropTargetAdvisor = GetDropTargetAdvisor(sender as DependencyObject);
            CurrentDropTargetAdvisor.TargetUI = sender as UIElement;

            UpdateEffects(e);

            // Setup the preview Adorner
            _offsetPoint = new Point();
            if (CurrentDropTargetAdvisor.ApplyMouseOffset && e.Data.GetData(DragOffsetFormat) != null)
            {
                _offsetPoint = (Point) e.Data.GetData(DragOffsetFormat);
            }
            CreatePreviewAdorner(sender as UIElement, e.Data);

            e.Handled = true;
        }
Esempio n. 14
0
		public static void SetDropTargetAdvisor(FrameworkElement depo, IDropTargetAdvisor advisor)
		{
			depo.SetValue(DropTargetAdvisorProperty, advisor);
		}
Esempio n. 15
0
 public static void SetDropTargetAdvisor(FrameworkElement depo, IDropTargetAdvisor advisor)
 {
     depo.SetValue(DropTargetAdvisorProperty, advisor);
 }