我有一个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尺寸:
网格尺寸:
即使在那里,网格也会尝试填充整个窗口的空间,而不仅仅是它的父StackPanel,它应该从中获取它的高度!
如何强制Grid固有StackPanel的高度?或者,即使用户调整Window的大小,我如何总是强制Grid使用整个StackPanel?
我尝试在所有这些项目上更改VerticalAlignment值,并删除了网格中的所有内容,认为这可能会导致问题,但无济于事!
答案 0 :(得分:1)
堆叠面板将调整其高度以匹配其内容的高度。一旦网格达到一定大小(例如800),堆叠面板将不会强制网格变小。
获得所需内容的一个简单选择是将StackPanel放入父网格,然后将子网格绑定到父网格的高度。