2012-02-24 79 views
2

我創建了一個像控件一樣的網格,並且我使用itemscontrol來表示一行,另一個itemcontrol將這些行放在一起。Itemscontrol水平定位項目,並使子項伸展到堆疊面板寬度

<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中的所有子項(使用stackpanel作爲項目面板)佔用其父項的全部寬度。但是這並沒有發生。

我讀過這也是一個stackpanel的默認行爲。

我的問題:

1)是否有佔用我的StackPanel(父)的整個寬度沒有辦法讓我的文本框(孩子)?我不知道堆棧面板將包含多少項目,所以我不能給文本框設置默認寬度。

2)是否有其他用於表示2D數據的內容? (我正在使用silverlight 4 MVVM)

在此先感謝。

+0

如果我們退後一步,你會說網格的約束是什麼?你想要固定的列數,行數?你想滾動嗎?你想修正單元格大小嗎? – Slugart 2012-02-24 13:18:42

+0

@Slugart:網格會限制我使用動態的行和列。我不想在網格中放置每件物品,因爲我不知道這裏有多少物品:它可以是3x3或9x9。 – Terry 2012-02-24 13:22:00

+0

我猜你不希望網格滾動,而是調整一致的單元格? – Slugart 2012-02-24 13:24:20

回答

2

退房的UniformGrid爲SL控制這裏:http://www.jeff.wilcox.name/2009/01/uniform-grid/

的UniformGrid從MSDN的定義是:「提供一種方法來安排在網格中的內容,其中在網格中的所有單元都具有相同的尺寸。」

如果您希望將其綁定到可觀察集合,只需將UniformGrid作爲UniformGrid extends Panel放置在ItemsControl的ItemsPanelTemplate中即可。

+0

@djerry更新答案,以考慮到綁定。 – Slugart 2012-02-24 14:29:53

+0

這個uniformgrid幫助我在我的路上! – Terry 2012-03-02 08:46:54

相關問題