【发布时间】:2012-02-24 13:05:15
【问题描述】:
我正在创建一个类似控件的网格,并且我正在使用一个 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)占据其父项的全部宽度。但这不会发生。
我读过这也是堆栈面板的默认行为。
我的问题:
1) 有没有办法让我的文本框(子级)占据我的堆栈面板(父级)的整个宽度?我不知道堆栈面板将包含多少项,所以我无法为文本框指定默认宽度。
2) 还有其他可以表示二维数据的吗? (我正在使用 silverlight 4 MVVM)
提前致谢。
【问题讨论】:
-
如果我们退后一步,你会说网格的约束是什么?你想固定列数,行数吗?你想让它滚动吗?是否要修复单元格大小?
-
@Slugart:网格会限制我使用动态行和列。我不想在网格中定位每个项目,因为我不知道那里会有多少项目:它可以是 3x3 或 9x9。
-
我猜你不希望网格滚动,而是统一调整单元格的大小?
-
@Slugart:确实,所有单元格最好具有相同的尺寸。
-
DataGrid 有问题吗? msdn.microsoft.com/en-us/library/…
标签: mvvm silverlight-4.0 orientation stackpanel