Пример #1
0
 private void TestDrop()
 {
     if (IsCtrlKeyDown)
     {
         ShowsDockControlGuide = false;
         PaneWithGuide         = null;
         if (_source.CanDrop(DockTreePosition.Floating))
         {
             Target = Target.Floating;
         }
         else
         {
             Target = Target.Empty;
         }
     }
     else
     {
         ShowsDockControlGuide = true;
         DockPane pane = PaneAtPoint();
         Debug.Assert(pane == null || (pane != null && _source.CanDrop(pane)));
         PaneWithGuide = pane;
         Target        = TargetAtPoint();
     }
     SetCursor();
 }
            private DockPane PaneAtPointNativeFloatingWindows(IDragSource source, double deltaX, double deltaY, out bool stopHitTest)
            {
                stopHitTest = false;

                FloatingWindowCollection floatingWindows = DockControl.FloatingWindows;
                Point pt = GetStartMousePosition(_overlayWindow);

                pt.Offset(deltaX, deltaY);
                for (int i = floatingWindows.Count - 1; i >= 0; i--)
                {
                    FloatingWindow floatingWindow = floatingWindows[i];
                    if (!floatingWindow.IsVisible)
                    {
                        continue;
                    }
                    NativeFloatingWindow nativeWindow = NativeFloatingWindow.GetNativeFloatingWindow(floatingWindow);
                    Rect windowBounds = nativeWindow.GetPreviewBounds(_overlayWindow);
                    stopHitTest = windowBounds.Contains(pt);
                    if (stopHitTest)
                    {
                        pt = GetStartMousePosition(nativeWindow);
                        pt.Offset(deltaX, deltaY);
                        var result = PaneFromHitTestResult(source, VisualTreeHelper.HitTest(nativeWindow, pt));
                        if (result == null || !source.CanDrop(result))
                        {
                            stopHitTest = false;
                            continue;
                        }
                        return(result);
                    }
                }

                return(null);
            }
Пример #3
0
            private static DockPane PaneFromHitTestResult(IDragSource source, HitTestResult result)
            {
                if (result == null || result.VisualHit == null)
                {
                    return(null);
                }

                for (Visual visual = result.VisualHit as Visual; visual != null; visual = VisualTreeHelper.GetParent(visual) as Visual)
                {
                    DockItem     targetItem     = GetTargetItem(visual);
                    DropPosition targetPosition = GetTargetPosition(visual);
                    if (targetItem != null && targetPosition == DropPosition.None && source.CanDrop(targetItem.FirstPane))
                    {
                        return(targetItem.FirstPane);
                    }
                }

                return(null);
            }
Пример #4
0
            private DockPane PaneAtPointWpfFloatingWindows(IDragSource source, double deltaX, double deltaY, out bool stopHitTest)
            {
                stopHitTest = false;

                FloatingWindowCollection floatingWindows = DockControl.FloatingWindows;
                Point pt = GetStartMousePosition(_wpfFloatingWindowClient);

                pt.Offset(deltaX, deltaY);
                for (int i = floatingWindows.Count - 1; i >= 0; i--)
                {
                    FloatingWindow floatingWindow = floatingWindows[i];
                    if (!floatingWindow.IsVisible)
                    {
                        continue;
                    }
                    WpfFloatingWindow window = _wpfFloatingWindowClient.ItemContainerGenerator.ContainerFromItem(floatingWindow) as WpfFloatingWindow;
                    if (window == null)
                    {
                        continue;
                    }
                    Rect windowBounds = new Rect(window.Left, window.Top, window.ActualWidth, window.ActualHeight);
                    stopHitTest = windowBounds.Contains(pt);
                    if (stopHitTest)
                    {
                        pt = _wpfFloatingWindowClient.TranslatePoint(pt, window);
                        var result = PaneFromHitTestResult(source, VisualTreeHelper.HitTest(window, pt));
                        if (result == null || !source.CanDrop(result))
                        {
                            stopHitTest = false;
                            continue;
                        }
                        return(result);
                    }
                }

                return(null);
            }