Example #1
0
        private static void ProbeDrag(Point screenPos, DragData data)
        {
            IDragRecievePoint target = null;
            var earg = new RecieveDragEventArgs(screenPos);

            foreach (var window in ZOrderWindows)
            {
                var relPos = window.PointFromScreen(screenPos);
                if (window.InputHitTest(relPos) is UIElement hitPart)
                {
                    hitPart.RaiseEvent(earg);
                }
                if (earg.Handled)
                {
                    target = earg.RecievePoint;
                    break;
                }
            }
            //Console.WriteLine($"Diff Pos [{screenPos}]:[{relPos}]");
            if (LastDragPoint != target)
            {
                //Console.WriteLine($"DragTarget [{LastDragPoint}]->[{target}]");
                LastDragPoint?.OnDragOut(data, ((FrameworkElement)LastDragPoint).PointFromScreen(screenPos));
                target?.OnDragIn(data, ((FrameworkElement)target).PointFromScreen(screenPos));
            }
            LastDragPoint = target;
        }
Example #2
0
 private static void OnDraged(DraggingWindow window, Point screenPos, DragData data)
 {
     ZOrderWindows = null;
     //LoacationChanged(Draging) must happen before DragMove finished(Drop)
     if (LastDragPoint != null)
     {
         ((DraggableTabControl)window.Content).RealChildren.Clear();
         window.Close();
         LastDragPoint.OnDragDrop(data, ((FrameworkElement)LastDragPoint).PointFromScreen(screenPos));
         LastDragPoint = null;
     }
     else
     {
         window.ToNormalWindow();
     }
 }