Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在silverlight中使用线形连接两个动态创建的形状_Silverlight_Shapes - Fatal编程技术网

在silverlight中使用线形连接两个动态创建的形状

在silverlight中使用线形连接两个动态创建的形状,silverlight,shapes,Silverlight,Shapes,我正在使用silverlight在asp.net中开发一种应用程序。。我是Silvelight的初学者,在codebehind(c#)中使用SHAPE和Line对象动态创建元素(矩形、椭圆、直线…) 这些形状将动态生成,这意味着我将调用后端的Web服务来确定需要创建多少对象/形状。一旦确定,我需要将对象/形状连接在一起 如何将动态创建的形状与Silverlight中的线条连接起来,如流程图 我读了下面的文章,但它对我不起作用,形状的实际高度和实际宽度值为0。 这是我的主页。xaml <U

我正在使用silverlight在asp.net中开发一种应用程序。。我是Silvelight的初学者,在codebehind(c#)中使用SHAPE和Line对象动态创建元素(矩形、椭圆、直线…)

这些形状将动态生成,这意味着我将调用后端的Web服务来确定需要创建多少对象/形状。一旦确定,我需要将对象/形状连接在一起

如何将动态创建的形状与Silverlight中的线条连接起来,如流程图

我读了下面的文章,但它对我不起作用,形状的实际高度和实际宽度值为0。

这是我的主页。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>
我在ButtonClick事件中所做的只是添加两个矩形,并尝试用一条线将它们连接起来(如流程图)。 请建议我的代码中有什么错误。

尝试替换该行

    connectShapes(rect1, rect2);

我不确定这种方法起作用的确切原因,但我相信只有当控件从代码中传递出去时,形状才会被渲染,而且只有当它们被渲染时,
ActualWidth
ActualHeight
属性才具有有用的值。调用
Dispatcher.BeginInvoke
稍后会调用您的代码;事实上,您可能会注意到在矩形之后绘制的线条

TransformToVisual
方法的行为方式与
ActualWidth
ActualHeight
属性的行为方式大致相同。如果形状尚未渲染,它将返回标识转换。即使您的线条是以一定的宽度和高度绘制的,它们最终也会在左上角一个接一个地绘制

我还发现我需要将线条添加到画布,而不是StackPanel,以便在矩形上绘制线条。否则,StackPanel很快就会被上面有很多空间的线条填满

    connectShapes(rect1, rect2);
    Dispatcher.BeginInvoke(() => connectShapes(rect1, rect2));