Stavo guardando this question e ho scoperto qualcosa di molto strano: sembra che l'altezza di una riga non sia calcolata correttamente in alcuni casi che riguardano Grid.RowSpan
.Perché questo spazio extra appare in una griglia?
Ecco un semplice disegno del Grid
sto testando con:
--------------- | 1 | | --------| 3 | | 2 | | --------------- | 4 | ---------------
Ed ecco alcuni esempi di codice per questa griglia che illustra il problema:
<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>
Il risultato finale è l'altezza della terza riga (cella n. 2 e n. 3) ha un sacco di spazio in più:
Se aggiusto il Grid.RowSpan
della 1a e 3a cella di +/- 1, e aggiusti lo Grid.Row
per la 2a e la 4a di +/- 1 per contabilizzare per la riga supplementare, ottengo questo risultato (corretto):
ho anche ottenere risultati corretti se rimuovere elementi sufficienti dalla cella # 3 in modo che possa rendere in una singola riga, in questo modo:
e stranamente, rimozione di alcuni il gli oggetti risultano solo in s ome dello spazio extra viene applicato
Sono stato nei guai con il numero di elementi in celle # 1 e # 3, e il numero di righe, ma io non riesco a capire un schema conclusivo per spiegare questo comportamento.
Che cosa esattamente fa WPF dietro le quinte quando si esegue il rendering di questa griglia per far sì che lo spazio extra appaia quando lo Grid.RowSpan
sulla cella n.
Stavo per dire perché una griglia misura in modo diverso ma l'ho provato con tutti gli stackpanel e le dimensioni sono errate. – Paparazzi
Ci sono troppe altezze di riga 'Auto'. Il controllo Grid fa un buon lavoro nell'affrontare lo spanning di righe e colonne, ma quando tutte le altezze di riga sono impostate su 'Auto' è come risolvere un'equazione con troppe incognite. Vincolare 1 o entrambe le prime 2 file a un'altezza fissa aiuta immensamente. – Stewbob
@Stewbob Ho anche provato a lasciare l'ultima riga a 'Height =" * "', e non fa differenza. Il problema è nel determinare l'altezza di una cella che usa 'RowSpan', e non è legata al modo in cui' Grid' alloca lo spazio verticale extra. Ho aggiornato il mio esempio di codice per includere una riga di dimensioni '*' per renderlo chiaro :) – Rachel