我创建了一个像控件一样的网格,并且我使用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)
在此先感谢。
如果我们退后一步,你会说网格的约束是什么?你想要固定的列数,行数?你想滚动吗?你想修正单元格大小吗? – Slugart 2012-02-24 13:18:42
@Slugart:网格会限制我使用动态的行和列。我不想在网格中放置每件物品,因为我不知道这里有多少物品:它可以是3x3或9x9。 – Terry 2012-02-24 13:22:00
我猜你不希望网格滚动,而是调整一致的单元格? – Slugart 2012-02-24 13:24:20