2011-01-21 24 views
1

私は、部屋の束を含むSilverlightでマップを作成しています。すべての部屋はポリゴンで、ほとんどが長方形です。ポリゴンの中心にテキストを配置する際の問題

私がやっていることは、ルームのx座標を使ってポリゴンを作成することです。何かのように

Polygon p = new Polygon 
p.points = pointCollection; 
MainCanvas.Chilren.Add(p); 

これは素晴らしいです。次に、各部屋の名前を地図上に入れたいと思います。私はちょうどポリゴンにテキストブロックの子を追加すると思った。残念ながら、UIElementsには子UIElementsを含めることはできないようです。私はこれがばかだと思うが、何でも。

次の計画:ポリゴンとテキストフィールドを含む新しいSilverlightユーザーコントロールを作成します。ユーザーコントロール内のポリゴンの中心テキストフィールド。だから私はちょうどこれらのUserControls "部屋"の1つを作成し、プロパティ "RoomShape"をポリゴンに設定し、それをキャンバスに追加します。ここでの問題は、Usercontrolが常に位置(0,0)に追加され、ルームの形状が右下の位置にあることです。私が本当に欲しかったのは、コントロールがポリゴンのサイズと形状を取ってそれを追加するために、中心を見つけてテキストを追加することでした。これは可能ですか?また

、のは、私がコントロールの私のレイアウトにポリゴンを追加するとしましょう:私はキャンバスの上にそれらをはっきりと見ることができるとき

LayoutRoot.Children.Add(poly); 

はなぜ

poly.ActualHeight 
poly.ActualWidth 
poly.height 
poly.width 

すべてが0またはNaNを返すのですか? そして、なぜ私は、彼らが(0,0)に配置されていないはっきりと見ることができるとき

Canvas.GetTop(poly); 
Canvas.GetLeft(poly); 

両方が0を返すのですか?

ポリゴンにテキストをセンタリングするための他の提案があります。

答えて

2

まず、PolygonにUIElementsを追加することはできません。ポリゴンはコンテナではないので、その中に要素を追加することはできません。

第2に、ポリゴンの中央にテキストを設定したい場合は、グリッド内でポリゴンを折り返してください。次にグリッドで、あなたのポリゴンを追加し、そのようなあなたのTextBlock:作成/読み込み時にユーザーコントロールを追加するため

<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_SizeChangedイベントで作業をしなければなりません。

関連する問題