2011-06-29 1 views
0

どのように銀色のオブジェクトの本当の位置を取得しますか?シルバーライトでどのようにオブジェクトの実際の位置を取得しますか?

私はヘッダー画像を画面の中央に表示しています。ブラウザーウィンドウを小さくすると、明らかにヘッダーの左側が画面から消えます。実際の位置を見つけることは、画像の上にオブジェクトを配置するかどうかを知ることは良いことです。

私はContent_Resizedをキャプチャして、私は少しテストを実行します。

 if (App.Current.Host.Content.ActualWidth > header.Width) 
     { 
      TEST = Canvas.GetLeft(header); 
     } 
     else 
     { 
      TEST = Canvas.GetLeft(header); 

     } 

TESTは常にゼロを返します。

EDIT:ヘッダーは、キャンバスの代わりにグリッドに配置されます。 "まあ、あなたの問題がある..."これは良い質問かもしれない。グリッドに画像の余白をどうやって入れるのですか?

+0

両方のブランチが同じです。そのため、このコードサンプルの80%は無関係です。 –

+0

あなたはどういうことを言っていますか?彼らはTESTがどこで変わるかを見るためには同一でなければなりません! – xarzu

+0

私は一時的な回答を掲示します。 –

答えて

1

私はおそらく質問に答えなければならないでしょうが、要素の位置を他の要素との相対的な位置を見つける方法はおそらく、(自分自身や他人によって)ここや他の場所で答えられているものでしょう。

ただし、画像の上にアイテムを配置する場合は、Gridに画像を配置し、次にそのアイテムをGridの子として追加します。こうすることで、イメージの相対位置をアイテムの余白として割り当て、Silverlightのレイアウトシステムに残りの処理をさせることができます。

一般的なルールとして、物事のサイズが変わったときにカスタムパネルなどを書いている場合を除いて、Silverlightレイアウトシステムを適切に使用していない場合、物を移動するためのコードを書く必要があると感じる場合。

編集は:

この実験してみてください -

<Grid x:Name="LayoutRoot"> 
    <Grid x:Name="headerContainer" Margin="50, 60, 0, 0" HorizontalAlignment="Left" VerticalAlignment="Top"> 
     <Image Source="YourLargeImage" /> 
     <Image Source="YourSmallerImage" HorizontalAlignment="Center" VerticalAlignment="Top" /> 
    </Grid> 
</Grid> 

は今、画面の周りにその位置を移動するために、内側グリッドの余白を変更してみてください。小さい画像は、常に大きな画像の中央に残ります。

+0

EDIT:ヘッダーは、キャンバスの代わりにグリッドに表示されます。 "まあ、あなたの問題がある..."これは良い質問かもしれない。グリッドに画像の余白をどうやって入れるのですか? – xarzu

0

私はそれを働かせました。

まず、これらの画像は、キャンバスではなくグリッド上に表示されます。しかし、グリッドをキャンバスに切り替えると、他の多くの問題が発生しました。その1つは、以前と同じようにヘッダ画像を中央に配置できないことです。

ソリューションは、コンテンツが次のようにサイズを変更したときに大きなヘッダー画像の上に座って小さな画像の余白に変更しました:

blankbarimage.Margin = new Thickness((App.Current.Host.Content.ActualWidth - header.Width)/2, 0, 0, 0); 

をして、方法によって、次のような内容リサイズメソッドを作成しますこの:

App.Current.Host.Content.Resized += new EventHandler(Content_Resized); 

だから、自分の質問に答えるために、あなたはSilverlightのオブジェクトのREAL位置を取得する方法は、その余白の設定を見て、(彼らはグリッド上にある場合)です。

+0

オブジェクトが複数の行または列を持ち、グリッド内のセル0,0以外のグリッドにある場合はどうなりますか?あなたはまだレイアウトエンジンがあなたのためにするように設計された仕事をするためのコードを書いています。私の答えに編集を参照してください。 – AnthonyWJones

関連する問題