我正在使用 silverlight 在 asp.net 中处理流程图类型的应用程序。我是 Silvelight 的初学者,在代码隐藏(c#)中使用 SHAPE 和 LINE 对象动态创建元素(矩形、椭圆、线)
这些形状将动态生成,这意味着我将在后端调用 Web 服务来确定需要创建多少对象/形状。一旦确定了这一点,我需要将对象/形状连接在一起。
如何将动态创建的形状与 Silverlight 中的线条连接起来,就像流程图一样。
我阅读了下面的文章,但它对我不起作用,形状值的实际高度和实际宽度为 0。 将两个形状连接在一起,Silverlight 2
这是我的MainPage.xaml
<UserControl x:Class="LightTest1.MainPage">
<Canvas x:Name="LayoutRoot" Background="White">
<Canvas x:Name="MyCanvas" Background="Red"></Canvas>
<Button x:Name="btnPush" Content="AddRectangle" Height="20" Width="80" Margin="12,268,348,12" Click="btnPush_Click"></Button>
</Canvas>
MainPage.xaml.cs后面的代码
StackPanel sp1 = new StackPanel();
public MainPage()
{
InitializeComponent();
sp1.Orientation = Orientation.Vertical;
MyCanvas.Children.Add(sp1);
}
Rectangle rect1;
Rectangle rect2;
Line line1;
private void btnPush_Click(object sender, RoutedEventArgs e)
{
rect1 = new Rectangle()
{
Height = 30,
Width = 30,
StrokeThickness = 3,
Stroke = new SolidColorBrush(Colors.Red),
};
sp1.Children.Add(rect1);
rect2 = new Rectangle()
{
Height = 30,
Width = 30,
StrokeThickness = 3,
Stroke = new SolidColorBrush(Colors.Red),
};
sp1.Children.Add(rect2);
connectShapes(rect1, rect2);
}
private void connectShapes(Shape s1, Shape s2)
{
var transform1 = s1.TransformToVisual(s1.Parent as UIElement);
var transform2 = s2.TransformToVisual(s2.Parent as UIElement);
var lineGeometry = new LineGeometry()
{
StartPoint = transform1.Transform(new Point(1, s1.ActualHeight / 2.0)),
EndPoint = transform2.Transform(new Point(s2.ActualWidth, s2.ActualHeight / 2.0))
};
var path = new Path()
{
Data = lineGeometry,
Stroke = new SolidColorBrush(Colors.Green),
};
sp1.Children.Add(path);
}
我在按钮单击事件中所做的只是添加两个矩形形状并用一条线将它们连接起来(如流程图)。请建议我的代码有什么问题..