Grid的ActualHeight没有正确地从它引用的StackPanel继承值

时间:2018-01-05 00:16:30

标签: c# .net wpf

我有一个StackPanel,里面有一个Grid。我希望Grid始终与StackPanel的大小相同,所以我有这样的代码设置:

<StackPanel Name="ContentPanel" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="#FF2B2B2B" Margin="0,0,0,0">
    <Grid HorizontalAlignment="Stretch" Margin="0, 0, 0, 0" VerticalAlignment="Top" Height="{Binding ActualHeight, ElementName=ContentPanel}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="200"  />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <!-- Content Goes Here! -->

    </Grid>
</StackPanel>

然而,我的网格似乎并不尊重身高。当我使用调整大小句柄调整窗口大小时,网格会正确扩展,但不会正确收缩并保留最大尺寸。这意味着通过VerticalAlignment = Bottom引用任何位置的任何人都有可能“消失”&#39;如果您将其调整为较小,则从屏幕上显示。

为了调试,我给了我的StackPanel一套500的高度 - 看看设计预览,我看到了:

StackPanel尺寸:

https://imgur.com/a/Q30Zb

网格尺寸:

https://imgur.com/a/oGV4a

即使在那里,网格也会尝试填充整个窗口的空间,而不仅仅是它的父StackPanel,它应该从中获取它的高度!

如何强制Grid固有StackPanel的高度?或者,即使用户调整Window的大小,我如何总是强制Grid使用整个StackPanel?

我尝试在所有这些项目上更改VerticalAlignment值,并删除了网格中的所有内容,认为这可能会导致问题,但无济于事!

1 个答案:

答案 0 :(得分:1)

堆叠面板将调整其高度以匹配其内容的高度。一旦网格达到一定大小(例如800),堆叠面板将不会强制网格变小。

获得所需内容的一个简单选择是将StackPanel放入父网格,然后将子网格绑定到父网格的高度。