我正在寻找连接或用线连接两个形状或对象。这些形状将动态生成,这意味着我将调用后端的Web服务以确定需要创建多少个对象/形状。一旦确定,我需要将物体/形状连接在一起。将两个形状连接在一起,Silverlight 2
方法签名可以是这样的(类似Visio的绘图功能):
GlueTogether(objButton1, objButton2);
我可能需要获得每个矩形形状或按钮的位置,以确定起跑线点。然后确定绘制线条的第二个形状/对象位置。
任何帮助或建议将是伟大的!
我正在寻找连接或用线连接两个形状或对象。这些形状将动态生成,这意味着我将调用后端的Web服务以确定需要创建多少个对象/形状。一旦确定,我需要将物体/形状连接在一起。将两个形状连接在一起,Silverlight 2
方法签名可以是这样的(类似Visio的绘图功能):
GlueTogether(objButton1, objButton2);
我可能需要获得每个矩形形状或按钮的位置,以确定起跑线点。然后确定绘制线条的第二个形状/对象位置。
任何帮助或建议将是伟大的!
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
};
我想大致相同,但不是到其他行从一个中心去我想要的线路停止在两个形状的边缘。 特别是在线条的末端有箭头,箭头需要停留在形状的边界上,而不是在形状的内部/后面到达其中心。
我的形状是一个带有网格和矩形的用户控件,以及一些标签和其他东西。 我找不到任何方法为我提供了形状边缘(这是一个圆角矩形)的几何图形。
我想出了一个解决方案,它使用边界框和交叉点通过它们的近似边缘处的线连接我的元素,并且它对我使用箭头结束行很有帮助。
见Connecting two WPF canvas elements by a line, without using anchors?
检查了这一点:http://www.graphspe.com/Main.aspx#/Solution/graphviz-xaml-renderer
所有你需要做的是对的printf一个字符串,你会得到你的Silverlight [2 | 3]图。
Ceyhun
坏链接 - 我得到了 “正在建设中页” – 2011-10-07 11:15:21
此外...而不是连接到你的对象的中心点,我已经修改了相同的代码从迈克尔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);
.FindCommonVisualAncestor是方便的,如果你的形状嵌套在不同的地方 - shape1.TransformToVisual(shape1.FindCommonVisualAncestor(shape2)) – zimmer62 2010-03-12 21:42:32