我在看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