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(); }
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(); }