我正在创建一个类似控件的网格,我正在使用itemscontrol来表示一行,而另一个itemscontrol则将这些行放在一起。在一行中,项目是水平放置的,所以我使用一个水平方向的StackPanel,如下所示:
<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采用其父级具有的大小,并且会发生这种情况。但是我也希望itemscontrol中的所有子节点(使用stackpanel作为itemspanel)占据其父节点的整个宽度。但这不会发生。
我读过这也是stackpanel的默认行为。
我的问题:
1)有没有办法让我的文本框(子)占据我的stackpanel(父级)的整个宽度?我不知道stackpanel将包含多少项,因此我无法为文本框提供默认宽度。
2)还有其他代表2D数据吗? (我正在使用silverlight 4 MVVM)
提前致谢。
答案 0 :(得分:2)
在此处查看UniformGrid for SL控件:http://www.jeff.wilcox.name/2009/01/uniform-grid/
来自MSDN的UniformGrid的定义:“提供一种在网格中排列内容的方法,其中网格中的所有单元格具有相同的大小。”
如果你想将它绑定到一个可观察的集合,只需将UniformGrid放在ItemsControl的ItemsPanelTemplate中,因为UniformGrid扩展了Panel。