将一些文本置于Polygon中心的问题

时间:2011-01-21 15:57:33

标签: c# silverlight xaml

我在Silverlight中创建了一个包含大量房间的地图。所有的房间都是多边形,大多数是矩形。

所以我正在做的是使用房间的x y点坐标创建一个Polygon。像

这样的东西
Polygon p = new Polygon
p.points = pointCollection;
MainCanvas.Chilren.Add(p);

这很有效。接下来,我想将每个房间的名称放在地图上。我想我只是在多边形中添加一个textblock子元素。不幸的是,似乎UIElements不能包含子UIElements。我认为这是愚蠢的,但无论如何。

下一个计划:创建一个包含多边形和文本字段的新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?

对于在多边形中居中文本的任何其他建议表示赞赏。

1 个答案:

答案 0 :(得分:2)

首先,您肯定无法将UIElements添加到Polygon。 Polygon不是容器,因此您无法在其中添加元素。

其次,如果要在多边形的中间设置文本,为什么不将多边形包装在网格中。然后在网格中,添加你的多边形和你的文本块:

<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>

第三,对于始终为0的大小,这可能是因为您在加载时创建/添加usercontrol。我知道它很难过,但你必须在容器的UserControl_SizeChanged事件中完成工作。