Itemscontrol水平定位项目并使子项伸展到stackpanel宽度

时间:2012-02-24 13:05:16

标签: mvvm silverlight-4.0 orientation stackpanel

我正在创建一个类似控件的网格,我正在使用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)

提前致谢。

1 个答案:

答案 0 :(得分:2)

在此处查看UniformGrid for SL控件:http://www.jeff.wilcox.name/2009/01/uniform-grid/

来自MSDN的UniformGrid的定义:“提供一种在网格中排列内容的方法,其中网格中的所有单元格具有相同的大小。”

如果你想将它绑定到一个可观察的集合,只需将UniformGrid放在ItemsControl的ItemsPanelTemplate中,因为UniformGrid扩展了Panel。