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