在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事件中完成这项工作。