2012-02-24 5 views
2

グリッドのようなコントロールを作成しています。私はitemscontrolを使って行を表し、別のitemscontrolを使ってそれらの行をまとめています。デフォルトではItemsコントロールを水平に配置し、子パネルをスタックパネルの幅に伸ばします。

<ItemsControl ItemsSource="{Binding CellRows}" Grid.Row="1" Grid.Column="1" Margin ="20"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <ItemsControl ItemsSource="{Binding}"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Horizontal" Background="Cyan"/> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <TextBox Text="{Binding Content}"/> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

が、私は私のStackPanelは親が持っているとそれが起こるのサイズをしたい:私はこのような水平方向でのStackPanelを使用して、行では、項目が水平に配置されています。しかし、私はitemscontrol(itemspanelとしてstackpanelを持つ)のすべての子供が親の全幅を占めるようにしたい。しかし、それは起こりません。

これは、スタックパネルのデフォルトの動作でもあります。

私の質問:

1)私のStackPanel(親)の全幅を取るために私のテキストボックス(子供を作るためにどのような方法が)ありますか?私はスタックパネルに何個のアイテムが含まれているのかわからないので、テキストボックスにデフォルトの幅を与えることはできません。

2)2Dデータを表現する他に何かありますか? (私はSilverlight 4 MVVMで作業しています)

ありがとうございます。

+0

私たちが一歩前進すれば、グリッドの制約は何だと思いますか?列の数を固定するか、行数にしますか?それをスクロールしたいですか?セルサイズを修正しますか? – Slugart

+0

@Slugart:グリッドは動的な行と列の使用を制限します。グリッド内のすべてのアイテムを配置する必要はありません。アイテムがいくつあるのかわからないので、3x3または9x9にすることができます。 – Terry

+0

私はあなたがグリッドをスクロールするのではなく、セルを一様にサイズ変更したくないと思っていますか? – Slugart

答えて

2

は、ここではSL制御のためのUniformGridをチェックアウト:MSDNからUniformGridのhttp://www.jeff.wilcox.name/2009/01/uniform-grid/

定義:「グリッド内のすべてのセルが同じサイズを持つグリッド内のコンテンツを整理する方法を提供します。」

これを観測可能なコレクションにバインドしたい場合は、UniformGridをItemsControlのItemsPanelTemplateにUniformGrid extends Panelとして配置するだけです。

+0

@ djerryは、バインディングを考慮に入れて答えを更新しました。 – Slugart

+0

このユニフォームグリッドは私の道を手伝ってくれました! – Terry

関連する問題