正如 Sertac Akyus 在评论中悲伤的那样,您只需要两个参考点就可以画一条线。
您可以简单地使用 LineTo 命令在框的父控件的画布上画一条线。
如果我们看看你的例子。可以使用以下过程在 Box1 和 Box2 之间画一条线:
//Move point to the bottom midle of the Box1
Parent.Canvas.MoveTo(Box1.Left+(Box1.Width div 2),Box1.Top+Box1.Height);
//Draw a line to the top middle of the Box2
Parent.Canvas.LineTo(Box2.Left+(Box2.Width div 2),Box2.Top);
现在你需要特别注意你的哪个控件更高,这样你的线不一定会越过它,而只会通向它的边界。
你甚至可以通过简单地从一个盒子的中心点到另一个盒子的中心点画线来让生活变得更轻松,就像这样
//Move point to the center of first box
Parent.Canvas.MoveTo(Box1.Left+(Box1.Width div 2),Box1.Top+(Box1.Height div 2));
//Draw a line to the center point of second box
Parent.Canvas.LineTo(Box2.Left+(Box2.Width div 2),Box2.Top+(Box2.Height div 2));
但这可能看起来不如第一种方法那么好。
不管怎样,使用思维导图迟早你可能会遇到画直线不够神的情况。
在这种情况下,您可能希望支持绘制曲线(至少绘制 S 曲线)。有了这些,您需要为您的用户提供调整它们的能力,以便他们不会越过其他框。但这需要用户能够选择特定的行,然后调整它的某些属性。
您可能想要使用的另一种高级方法是自动绘制曲线。这种方法使用背景中的寻路算法来找到表示可能线路径的多个参考点,然后能够通过这些参考点渲染 Catmul-Rom 脊椎。
不幸的是,我无法为您提供这种高级方法的任何代码示例,因为我仍在尝试自己实现它。