我在看this question,发现一些非常奇怪的事情:在一些涉及Grid.RowSpan
的案例中,似乎错误地计算了一行的高度。为什么这个额外的空间出现在网格中?
这里的Grid
的简单的画图我与测试:
--------------- | 1 | | --------| 3 | | 2 | | --------------- | 4 | ---------------
,这里是这个网格一些示例代码演示该问题:
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" Background="Red">
<Label Content="CELL 1 A"/>
<Label Content="CELL 1 B"/>
<Label Content="CELL 1 C"/>
</StackPanel>
<Grid Grid.Column="0" Grid.Row="2" Background="CornflowerBlue">
<Label Content="CELL 2 D"/>
</Grid>
<StackPanel Grid.Column="1" Grid.Row="0" Grid.RowSpan="3" Background="Yellow">
<Label Content="CELL 3 A"/>
<Label Content="CELL 3 B"/>
<Label Content="CELL 3 C"/>
<Label Content="CELL 3 D"/>
</StackPanel>
<Grid Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="2" Background="Green">
<Label Content="CELL 4"/>
</Grid>
</Grid>
最终的结果是高度第3行(单元#2和#3)有很多额外的空间:
如果我将第一个和第三个单元格的Grid.RowSpan
调整为+/- 1,并将第二个和第四个单元格的Grid.Row
调整为+/- 1以考虑多余的行,我得到以下(正确)结果:
我也得到正确的结果,如果我从小区#3去除足够的元素,因此它可以在一个单一的行渲染,就像这样:
而且奇怪的是,删除一些对象只导致s额外空间的OME应用于
我一直在细胞中的元素#1和#3,和行数的数量瞎搞,但我似乎无法找出一个确凿的模式来解释这种行为。
究竟是什么WPF在幕后进行渲染这个Grid时导致额外的空间出现在单元格3上的Grid.RowSpan
?
我想说,因为网格的措施不同,但我尝试了所有的堆叠面板,它仍然大小错误的行。 – Paparazzi 2013-05-01 17:41:14
有太多'自动'排高度。 Grid控件在处理行和列跨越方面做得非常好,但是当所有行高设置为“Auto”时,就像解决一个有太多未知数的方程一样。将顶端2行中的1个或两个固定在一个固定的高度会极大地帮助您。 – Stewbob 2013-05-01 19:27:59
@Stewbob我也在'Height =“*”'上留下最后一行进行了测试,并没有什么区别。问题在于确定使用“RowSpan”的单元格的高度,而与“Grid”如何分配额外的垂直空间无关。我已更新我的代码示例以包含一个'*'大小的行以帮助将其清除:) – Rachel 2013-05-01 20:04:24