我正在寻找用一条线将两个形状或对象连接或粘合在一起。这些形状将动态生成,这意味着我将在后端调用 Web 服务来确定需要创建多少对象/形状。一旦确定了这一点,我需要将对象/形状连接在一起。
方法签名可能如下所示(类似于 Visio 的绘图功能):
GlueTogether(objButton1, objButton2);
我可能需要获取每个 Rectangle 形状或 Button 的位置来确定起始 Line 点的位置。然后确定第二个形状/对象的位置来画线。
任何帮助或建议都会很棒!
我正在寻找用一条线将两个形状或对象连接或粘合在一起。这些形状将动态生成,这意味着我将在后端调用 Web 服务来确定需要创建多少对象/形状。一旦确定了这一点,我需要将对象/形状连接在一起。
方法签名可能如下所示(类似于 Visio 的绘图功能):
GlueTogether(objButton1, objButton2);
我可能需要获取每个 Rectangle 形状或 Button 的位置来确定起始 Line 点的位置。然后确定第二个形状/对象的位置来画线。
任何帮助或建议都会很棒!
var transform1 = shape1.TransformToVisual(shape1.Parent as UIElement);
var transform2 = shape2.TransformToVisual(shape2.Parent as UIElement);
var lineGeometry = new LineGeometry()
{
StartPoint = transform1.Transform(new Point(shape1.ActualWidth / 2, shape1.ActualHeight / 2.0)),
EndPoint = transform2.Transform(new Point(shape2.ActualWidth / 2.0, shape2.ActualHeight / 2.0))
};
var path = new Path()
{
Data = lineGeometry
};
我正在尝试相同的方法,但不是从一个中心到另一个中心的线,我希望这些线停在两个形状的边缘。特别是我在线条的末端有箭头,箭头需要停在形状的边界处,而不是在形状的内部/后面到达它的中心。
我的形状是一个带有网格和矩形的用户控件,以及一些标签和其他东西。我找不到任何方法可以为我提供形状边缘的几何形状(圆角矩形)。
我想出了一个解决方案,它使用边界框和交点通过线在其近似边缘处连接我的元素,并且使用箭头结束的线对我来说效果很好。
看看这个: http: //www.graphspe.com/Main.aspx#/Solution/graphviz-xaml-renderer
您所要做的就是将 printf 打印到一个字符串,然后您就可以得到 Silverlight[2|3] 图。
采洪
此外......我没有连接到对象的中心点,而是将 Michael S. 的相同代码修改为:
var lineGeometry = new LineGeometry()
{
StartPoint = transform1.Transform(new Point(1 , b1.ActualHeight / 2.0)),
EndPoint = transform2.Transform(new Point(b2.ActualWidth , b2.ActualHeight / 2.0))
};
这将在每个对象的外部连接。
我正在使用上面的代码来绘制两个按钮,我想要在这两个按钮之间有一条线,但我得到的只是两个看起来像小圆圈并且没有线的按钮。
代码:
Button b1 = new Button();
Button b2 = new Button();
canvas1.Children.Add(b1);
canvas1.Children.Add(b2);
Canvas.SetLeft(b1, 300);
var transform1 = b1.TransformToVisual(b1.Parent as UIElement);
var transform2 = b2.TransformToVisual(b2.Parent as UIElement);
var lineGeometry = new LineGeometry()
{
StartPoint = transform1.Transform(new Point(1, b1.ActualHeight / 2.0)),
EndPoint = transform2.Transform(new Point(b2.ActualWidth, b2.ActualHeight / 2.0))
};
var path = new Path()
{
Data = lineGeometry
};
canvas1.Children.Add(path);