我正在寻找用线连接或粘合两个形状或物体。这些形状将动态生成,这意味着我将在后端调用Web服务来确定需要创建多少个对象/形状。确定后,我需要将对象/形状连接在一起。
方法签名可能如下所示(类似于Visio的绘图功能):
GlueTogether(objButton1, objButton2);
我可能需要获取每个Rectangle形状或Button的位置以确定起始线点的位置。然后确定第二个形状/物体位置以绘制线条。
任何帮助或建议都会很棒!
答案 0 :(得分:7)
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
};
答案 1 :(得分:0)
我的尝试大致相同,但不是从一个中心到另一个中心的线,我希望线条停在两个形状的边缘。 特别是我在线的末端有箭头,箭头需要停在形状的边界,而不是在形状的内部/后面到达其中心。
我的形状是一个带有网格和矩形的用户控件,还有一些标签和其他东西。 我找不到任何为我提供形状边缘几何形状的方法(这是一个圆角矩形)。
我找到了一个解决方案,它使用边界框和交叉点在我们的近似边缘用线条连接我的元素,并且使用箭头结束的线条对我来说效果很好。
请参阅Connecting two WPF canvas elements by a line, without using anchors?
答案 2 :(得分:0)
检查出来:http://www.graphspe.com/Main.aspx#/Solution/graphviz-xaml-renderer
您需要做的就是将printf转换为字符串,然后获得Silverlight [2 | 3]图表。
Ceyhun
答案 3 :(得分:0)
此外...我没有连接到对象的中心点,而是将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))
};
这将连接每个对象的外部。
答案 4 :(得分: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);