在Polygon中获取一些文本的问题
问题描述:
我在Silverlight中创建了一个包含一堆房间的地图。所有的房间都是多边形,大多数是矩形。在Polygon中获取一些文本的问题
所以我正在做的是使用房间的x y点坐标创建一个多边形。类似于
Polygon p = new Polygon
p.points = pointCollection;
MainCanvas.Chilren.Add(p);
这很好。接下来,我想把每个房间的名字放在地图上。我想我只是将一个文本块子添加到多边形。不幸的是,UIElements似乎不能包含儿童UIElements。我认为这是愚蠢的,但无论如何。
Next plan:创建一个包含多边形和文本字段的新Silverlight用户控件。用户控件中的多边形中心文本字段。因此,我只创建其中一个UserControls“Room”,将属性“RoomShape”设置为多边形并将其添加到画布。这里的问题是Usercontrol总是添加在位置(0,0),房间形状位于右下角位置。我真正想要的是让控件将其添加到其中的多边形的大小和形状,以便我可以找到中心并添加文本。这可能吗?
此外,假设我一个多边形的控件添加到我的布局:
LayoutRoot.Children.Add(poly);
为什么
poly.ActualHeight
poly.ActualWidth
poly.height
poly.width
都返回0或NaN时,我可以清楚地看到他们在画布上? ,为什么
Canvas.GetTop(poly);
Canvas.GetLeft(poly);
都返回0的时候我可以清楚地看到它们不是位于(0,0)?
任何其他建议,在一个多边形中的文本居中表示赞赏。
答
首先,当然,您不能将UIElements添加到多边形。多边形不是一个容器,所以你不能在其中添加元素。第二,如果你想在你的多边形的中间设置文本,为什么不把你的多边形包装在一个网格中。然后在网格中,添加您的多边形,和你的文本块这样的:总是在0
<Grid x:Name="room1" Background="LightBlue" HorizontalAlignment="Center" VerticalAlignment="Center">
<Polygon Stroke="Black" Fill="Beige">
<Polygon.Points >
<Point X="0" Y="0" />
<Point X="20" Y="100" />
<Point X="100" Y="50" />
<Point X="0" Y="0" />
</Polygon.Points>
</Polygon>
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center">Room Name</TextBlock>
</Grid>
三,大小,这可能是因为你创建/加载时添加的用户控件。我知道它的悲伤,但你必须在容器的UserControl_SizeChanged
事件中完成这项工作。