我在看这个问题,发现了一些非常奇怪的事情:在某些涉及Grid.RowSpan
.
Grid
这是我正在测试的简单绘图:
--------------- | 1 | | --------| 3 | | 2 | | --------------- | 4 | ---------------
这里有一些演示该问题的 Grid 示例代码:
<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 中删除足够多的元素,我也会得到正确的结果,以便它可以在单个行中呈现,如下所示:
奇怪的是,删除一些对象只会应用一些额外的空间
我一直在搞乱单元格 #1 和 #3 中的元素数量以及行数,但我似乎无法找出一个决定性的模式来解释这种行为。
Grid.RowSpan
渲染此 Grid 以导致在单元格 #3 上出现额外空间时,WPF 在幕后究竟做了什么?