static ConnectionPoint ConnectionPointHitTest(UIElement element, Point hitPoint)
        {
            ConnectionPoint        hitConnectionPoint = null;
            List <ConnectionPoint> connectionPoints   = StateContainerEditor.GetConnectionPoints(element);

            foreach (ConnectionPoint connPoint in connectionPoints)
            {
                if (connPoint != null)
                {
                    // We need to transform the connection point location to be relative to the outmost panel
                    FreeFormPanel panel = GetVisualAncestor <FreeFormPanel>(element);
                    if (new Rect(panel.GetLocationRelativeToOutmostPanel(connPoint.Location) + connPoint.HitTestOffset, connPoint.HitTestSize).Contains(hitPoint))
                    {
                        hitConnectionPoint = connPoint;
                        break;
                    }
                }
            }
            return(hitConnectionPoint);
        }
        static internal ConnectionPoint GetClosestConnectionPoint(ConnectionPoint srcConnPoint, List <ConnectionPoint> destConnPoints, out double minDist)
        {
            minDist = double.PositiveInfinity;
            double          dist         = 0;
            ConnectionPoint closestPoint = null;
            Point           srcPoint     = FreeFormPanel.GetLocationRelativeToOutmostPanel(srcConnPoint);

            foreach (ConnectionPoint destConnPoint in destConnPoints)
            {
                if (srcConnPoint != destConnPoint)
                {
                    dist = DesignerGeometryHelper.ManhattanDistanceBetweenPoints(srcPoint, FreeFormPanel.GetLocationRelativeToOutmostPanel(destConnPoint));
                    if (dist < minDist)
                    {
                        minDist      = dist;
                        closestPoint = destConnPoint;
                    }
                }
            }

            return(closestPoint);
        }