2012-03-28 17 views
0

グリッドがあるページがあります。動的に追加されたコントロールが、どこに表示されないのですか。

ComboBoxの選択に基づいて、ContextMenu(これまでのところとても良い)を持つ適切なGridViewを動的に追加します。

ContextMenuItemオプションの1つにユーザー入力が必要なため、グリッドにコントロールを動的に作成して追加し、グリッドをページのグリッドの子として追加します(同時にグリッドの最初の子を非表示にしますGridView))。

コントロールが予想された位置に表示されません。私が0,0,0,0を指定すると、それらは真ん中のどこかに現れます。私が-800、-400、0,0を指定すると、それらはどこにあるかわかりますが、どこにあるかはわかりません(グリッド自体は800x400です)。

何か不足していますか?

私は列と行を追加し、そのように位置を指定しようとしました。私はコントロールのマージンを直接設定しようとしました。期待どおりに動作するものはありません。あなたは正確にコントロールを配置している場合は、Canvasを使用する必要があります

おかげ

答えて

1

Gridは、コントロールを相対的に配置するように設計されていますが、絶対的に配置するように見えます(Grid内)。

+0

ありがとうございます。これはうまくいった。 – user1299040

0

コントロールを配置するには、いくつかの方法があります。 Gridの代わりにCanvas要素を使用し、配置するコントロールにLeftTopプロパティを設定する必要があります。 (30、10)にボタンを配置するXAMLで サンプル:

<Canvas> 
    <Button x:Name="sampleButton" 
      Width="30" Height="20" 
      Canvas.Left="30" 
      Canvas.Top="10"/> 
</Canvas> 

背後にあるコードでのサンプル:

... 
Canvas.SetLeft(sampleButton, 30); 
Canvas.SetTop(sampleButton, 10); 
... 

あなたは、しかし、(何らかの理由で)Gridを使用する必要がある場合は、あなたは、TopLeftVerticalAlignmentからHorizontalAlignmentを設定しWidthHeightに適切な値を指定して、X、Y、0、0に余白を設定することができます。 サンプルコード:

<Grid> 
    <Button x:Name="sampleButton" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Top" 
      Width="30" Height="20" 
      Margin="30, 10, 0, 0"/> 
</Grid> 
+0

私はHorizo​​ntalAlignmentとVerticalAlignmentを使っていて、助けにはならなかった。キャンバスを使わない理由はありません。それはうまくいくようです。 – user1299040

+0

コントロールが定義されている 'Grid'のセルの内部で動作します。私の例では、1行1列の 'Grid'がありますので、' Grid'コンテナ全体と同じように動作します。 'Grid'でいくつかの行と列を定義した場合、これを考慮する必要があります。 –

関連する問題