如何在Silverlight 4中设置Data Grid的高度

3

我在页面中有几个DataGrids,每个DataGrid都是通过以下布局/标记定位的:

<border BorderBrush="Black">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="30"/>
        </Grid.RowDefinitions>
        <TextBlock x:Name="Title" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" Margin="6,0,0,0" Content="Panel Title"/>
        <toolkit:BusyIndicator Grid.Row="1" Grid.Column="0" x:Name="GridLoadingIndicator">
            <StackPanel Orientation="Vertical">
                <sdk:DataGrid x:name="GVData" 
                    VerticalAlignment="Stretch"
                    HorizontalAlignment="Stretch"
                    AutoGenerateColumns="False"
                    HorizontalScrollBarVisibility="Visible"
                    SelectionMode="Single">
                    <datagrid:DataGridTextColumn Header="Column 1" Binding="{Binding Col1}" />                              
                    <datagrid:DataGridTextColumn Header="Column 2" Binding="{Binding Col2}" />                              
                    <datagrid:DataGridTextColumn Header="Column 3" Binding="{Binding Col3}" />                              
                    <datagrid:DataGridTextColumn Header="Column 4" Binding="{Binding Col4}" />                              
                    <datagrid:DataGridTextColumn Header="Column 5" Binding="{Binding Col5}" />
                </sdk:DataGrid>
            </StackPanel>
        </toolkit:BusyIndicator>
        <StackPanel x:Name="PagerControls" Grid.Row="2" Grid.Column="0" Orientation="Horizontal">
            <!-- Pager -->
        </StackPanel>
    </Grid>
</border>

问题在于网格本身不想拉伸以填充分配给它的空间,而且它也不响应页面大小事件。

有什么解决办法吗?


1
网格为什么在堆栈面板中? - Derek Beattie
我尝试了加边框,它完美地运行了! - bleepzter
1个回答

1

Derek Beattie 在他的评论中是正确的。

如果你的 Grid 在一个 StackPanel 中,而且这个 StackPanel 没有 HorizontalAlignment="Stretch"(也就是在不增长的方向上),那么栈面板将适合它的子元素。

这使得你的 Grid 中的 HorizontalAlignment="Stretch" 失效,因为它只能拉伸到它的直接父级(也就是 StackPanel)。而且它是一个 StackPanel,这意味着在内部 Grid 上设置 VerticalAlignment="Stretch" 是没有任何作用的。

如果你确实需要内部的 StackPanel(如果只有一个子元素就没有必要了),那么也要给它添加 HorizontalAlignment="Stretch"。这对垂直拉伸不会有任何影响。

我个人会直接删除围绕内部 GridStackPanel,因为它没有任何价值。


即使在堆栈面板上设置了HorizontalAlignment="Stretch"和VerticalAlignment="Stretch",仍然会出现相同的问题。正如@Derek Beattie建议的那样,我将堆栈面板更改为边框,一切都很好。 - bleepzter
正如它们所说的,“StackPanels用于堆叠”。根据你目前的设计,你不需要边框,只需要网格本身。你将它嵌套在另一个控件中的原因是什么? - iCollect.it Ltd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接