StackPanel高度超过父网格高度

时间:2015-07-30 18:58:51

标签: c# wpf xaml

我有这样的情况:

<UserControl>
    <Grid x:Name="fullGrid" VerticalAlignment="Stretch">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid x:Name="innerGrid" VerticalAlignment="Stretch">
            <Grid.RowDefinitions>
              <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <StackPanel x:Name="leftSide" VerticalAlignment="Stretch">
                <ScrollViewer VerticalAlignment="Stretch">
                    <ItemsControl/ VerticalAlignment="Stretch">
                </ScrollViewer>
            </StackPanel>
        </Grid>
    </Grid>
</UserControl>

问题是leftSide stackPanel高度高于它的父级:innerGrid高度。

我在Snoop中进行了调试,似乎StackPanel忽略了它的VerticalAlignment属性。

我想避免设置Heigh={Binding ElementName=xxx, Path=ActualHeight}因为我内部有一些额外的Margins,它会破坏视图。

我该如何处理?

1 个答案:

答案 0 :(得分:2)

ScrollViewer填写其父母。 StackPanel希望为其子项调整大小,因此告诉他们他们有足够的空间(然后“收缩到适合”)。

所以,StackPanel告诉ScrollViewer它可以拥有世界上所有的空间,它很乐意。除了在描述或设置绝对高度时进行绑定外,没有办法阻止它。

所以简单的解决方案是:删除StackPanel。然后,ScrollViewer会占用Grid指定的空间。