Patrzyłem na this question i odkryłem coś bardzo dziwnego: wydaje się, że wysokość rzędu jest niepoprawnie obliczona w niektórych przypadkach z udziałem Grid.RowSpan
.Dlaczego ta dodatkowa przestrzeń pojawia się w siatce?
Oto prosty rysunek Grid
mam testowanie z:
--------------- | 1 | | --------| 3 | | 2 | | --------------- | 4 | ---------------
A oto przykładowy kod dla tej siatki, który demonstruje problem:
<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>
Końcowym rezultatem jest wysokość w trzecim wierszu (komórka nr 2 i nr 3) ma dużo dodatkowej przestrzeni:
Jeśli ustawię Grid.RowSpan
z 1. i 3. komórki przez +/- 1 i dostosuję Grid.Row
dla 2. i 4. pozycji przez +/- 1, aby uwzględnić dodatkowy wiersz, otrzymam ten (prawidłowy) wynik:
ja również uzyskać poprawne wyniki jeśli usunąć wystarczająco dużo elementów z komórki # 3 więc może to uczynić w jednym rzędzie, tak:
i na tyle dziwnie, usuwanie jednych obiekty dają tylko s ome z dodatkowej przestrzeni stosowane
Byłem pałować z liczbą elementów w komórkach # 1 i # 3, a liczba wierszy, ale nie wydaje się, aby dowiedzieć się rozstrzygający wzór wyjaśniający to zachowanie.
Czym dokładnie jest WPF za sceną podczas renderowania tej siatki w celu spowodowania pojawienia się dodatkowego miejsca w komórce nr 3 podczas Grid.RowSpan
?
Miałem zamiar powiedzieć, ponieważ kratka mierzy inaczej, ale wypróbowałem ją ze wszystkimi panelami piętrowymi i nadal rozmiar ten jest nieprawidłowy. – Paparazzi
Zbyt wiele rzędów "Auto". Kontrolka Grid radzi sobie całkiem nieźle z rozpiętością rzędów i kolumn, ale kiedy wszystkie poziomy rzędów są ustawione na "Auto", to jak rozwiązywanie równania ze zbyt wieloma niewiadomymi. Ograniczenie 1 lub obu górnych 2 rzędów do ustalonej wysokości pomaga niezmiernie. – Stewbob
@Stewbob Testowałem również, pozostawiając ostatni wiersz w 'Height =" * "' i nie ma to znaczenia. Problem polega na określeniu wysokości komórki, która używa 'RowSpan' i nie jest związana z tym, w jaki sposób' Grid' przydziela dodatkową pionową przestrzeń. Zaktualizowałem próbkę kodu tak, aby zawierał wiersz o rozmiarze "*", aby to wyjaśnić :) – Rachel