我刚刚开始尝试使用网格分析器,偶然发现了一个非常奇怪的行为,我似乎无法修复它。显然其他人也有类似的问题(根据谷歌),但没有有用的评论。
我有一个有2行的网格。在启动时,底部的Hight
为250.顶行的剩余部分为*
。当我使用拆分器调整行的大小时,行为与顶行的预期一致。但是当我向上拖动分割器并经过程序窗口时,底行的内容将从窗口中掉出(=向下移动直到它消失)。我希望我不能使每一行都大于父容器。
<Grid x:Name="grid_main" ScrollViewer.VerticalScrollBarVisibility="Disabled" >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition MinHeight="250" Height="250"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<GridSplitter x:Name="splitter"
ResizeDirection="Rows" Grid.Column="0" Grid.ColumnSpan="1" Grid.Row="0" Width="Auto"
Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="0" ResizeBehavior="BasedOnAlignment" />
<Grid Grid.Column="0" Grid.Row="0">
</Grid>
<Grid Grid.Column="0" Grid.Row="1">
</Grid>
</Grid>
这是我的代码。两行的内容再次托管在网格中,并且为了简单起见已被删除。再次:调整顶行的工作正常。但是底行可以调整为无穷大。如果我对MaxHeight
进行硬编码,它会按预期工作。但这取决于窗口大小。
答案 0 :(得分:4)
尝试将第二个RowDefinition
更改为以下内容:
<RowDefinition MinHeight="250" MaxHeight="{Binding ElementName=grid_main, Path=ActualHeight}" Height="250"/>
这将确保行高不超过窗口大小。
答案 1 :(得分:0)
Richard的解决方案对我不起作用(网格的ActualHeight扩展超过窗口大小以及行高)。
使用Snoop,我发现祖先ContentPresenter的ActualHeight没有增加。因此,下面的底行定义对我有用,但如果我在顶行或底行设置MinHeight时仍然会遇到问题:
<RowDefinition Height="430"
MaxHeight="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentPresenter}}, Path=ActualHeight}"/>
答案 2 :(得分:0)
这个问题只发生在因为第二行有绝对高度。如果您确实想要绝对高度值,请尝试理查兹的解决方案。否则,也只需在第二行使用相对高度(例如 2*)。