私はこの質問を見ていて、非常に奇妙なことを発見しました.行の高さが、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 番目と 3 番目のセルの を +/- 1 で調整しGrid.Row
、2 番目と 4 番目のセルを +/- 1 で調整して余分な行を考慮すると、次の (正しい) 結果が得られます。
次のように、セル #3 から十分な要素を削除して、単一の行でレンダリングできるようにすると、正しい結果も得られます。
そして奇妙なことに、いくつかのオブジェクトを削除すると、余分なスペースの一部だけが適用されます
セル #1 と #3 の要素の数、および行の数をいじっていますが、この動作を説明する決定的なパターンを理解できないようです。
Grid.RowSpan
このグリッドをレンダリングして、セル #3のときに余分なスペースが表示されるようにするときに、WPF は舞台裏で何をしているのでしょうか?