Ejemplo n.º 1
0
        void CheckDrop(object sender, System.Windows.DragEventArgs e)
        {
            var types          = e.Data.GetFormats().Select(DataConverter.ToXwtTransferType).ToArray();
            var pos            = e.GetPosition(Widget).ToXwtPoint();
            var proposedAction = DetectDragAction(e.KeyStates);

            e.Handled = true;             // Prevent default handlers from being used.

            if ((enabledEvents & WidgetEvent.DragOverCheck) > 0)
            {
                var checkArgs = new DragOverCheckEventArgs(pos, types, proposedAction);
                Context.InvokeUserCode(delegate {
                    eventSink.OnDragOverCheck(checkArgs);
                });
                if (checkArgs.AllowedAction == DragDropAction.None)
                {
                    e.Effects = currentDragEffect = DragDropEffects.None;
                    return;
                }
                if (checkArgs.AllowedAction != DragDropAction.Default)
                {
                    e.Effects = currentDragEffect = checkArgs.AllowedAction.ToWpfDropEffect();
                    return;
                }
            }

            if ((enabledEvents & WidgetEvent.DragOver) > 0)
            {
                var store = new TransferDataStore();
                FillDataStore(store, e.Data);                  //, DragDropInfo.TargetTypes);

                var args = new DragOverEventArgs(pos, store, proposedAction);
                OnDragOver(sender, args);
                if (args.AllowedAction == DragDropAction.None)
                {
                    e.Effects = currentDragEffect = DragDropEffects.None;
                    return;
                }
                if (args.AllowedAction != DragDropAction.Default)
                {
                    e.Effects = currentDragEffect = args.AllowedAction.ToWpfDropEffect();
                    return;
                }
            }

            e.Effects = currentDragEffect = proposedAction.ToWpfDropEffect();
        }
Ejemplo n.º 2
0
        void WidgetDragOverHandler(object sender, System.Windows.DragEventArgs e)
        {
            var types          = e.Data.GetFormats().Select(t => t.ToXwtTransferType()).ToArray();
            var pos            = e.GetPosition(Widget).ToXwtPoint();
            var proposedAction = DetectDragAction(e.KeyStates);

            e.Handled = true;             // Prevent default handlers from being used.

            if (Adorner != null)
            {
                var w = GetParentWindow();
                var v = (UIElement)w.Content;

                if (w != AdornedWindow)
                {
                    AdornedLayer.Remove(Adorner);

                    AdornedWindow.AllowDrop = false;
                    AdornedWindow.DragOver -= AdornedWindowOnDragOver;

                    AdornedWindow           = w;
                    AdornedWindow.AllowDrop = true;
                    AdornedWindow.DragOver += AdornedWindowOnDragOver;

                    AdornedLayer = AdornerLayer.GetAdornerLayer(v);
                    AdornedLayer.Add(Adorner);
                }

                Adorner.Offset = e.GetPosition(v);
            }

            if ((enabledEvents & WidgetEvent.DragOverCheck) > 0)
            {
                var checkArgs = new DragOverCheckEventArgs(pos, types, proposedAction);
                Context.InvokeUserCode(delegate {
                    eventSink.OnDragOverCheck(checkArgs);
                });
                if (checkArgs.AllowedAction == DragDropAction.None)
                {
                    e.Effects = currentDragEffect = DragDropEffects.None;
                    return;
                }
                if (checkArgs.AllowedAction != DragDropAction.Default)
                {
                    e.Effects = currentDragEffect = checkArgs.AllowedAction.ToWpfDropEffect();
                    return;
                }
            }

            if ((enabledEvents & WidgetEvent.DragOver) > 0)
            {
                var store = new TransferDataStore();
                FillDataStore(store, e.Data, DragDropInfo.TargetTypes);

                var args = new DragOverEventArgs(pos, store, proposedAction);
                OnDragOver(sender, args);
                if (args.AllowedAction == DragDropAction.None)
                {
                    e.Effects = currentDragEffect = DragDropEffects.None;
                    return;
                }
                if (args.AllowedAction != DragDropAction.Default)
                {
                    e.Effects = currentDragEffect = args.AllowedAction.ToWpfDropEffect();
                    return;
                }
            }

            e.Effects = currentDragEffect = proposedAction.ToWpfDropEffect();
        }