L'equivalente WPF di DockStyle.Fill di WinForms è:
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Questa è l'impostazione predefinita per quasi i controlli, quindi in generale non devi fare nulla per fare in modo che un controllo WPF riempia il suo contenitore padre : lo fanno automaticamente. Questo è vero per tutti i contenitori che non comprimono i loro figli alla dimensione minima.
Errori comuni
Spiegherò ora diversi errori comuni che impediscono HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
di funzionare come previsto.
1. Altezza o larghezza esplicite
Un errore comune consiste nello specificare in modo esplicito una larghezza o un'altezza per un controllo. Quindi, se hai questo:
<Grid>
<Button Content="Why am I not filling the window?" Width="200" Height="20" />
...
</Grid>
Basta rimuovere gli attributi Larghezza e Altezza:
<Grid>
<Button Content="Ahhh... problem solved" />
...
</Grid>
2. Il pannello di contenimento comprime il controllo alla dimensione minima
Un altro errore comune è quello di avere il pannello di contenimento che stringe il controllo il più possibile. Ad esempio, uno StackPanel verticale comprimerà sempre i suoi contenuti verticalmente il più piccolo possibile:
<StackPanel>
<Button Content="Why am I squished flat?" />
</StackPanel>
Passa a un altro pannello e sarai pronto per iniziare:
<DockPanel>
<Button Content="I am no longer squished." />
</DockPanel>
Inoltre, qualsiasi riga o colonna Grid la cui altezza è "Auto" comprimerà in modo simile il suo contenuto in quella direzione.
Alcuni esempi di contenitori che non schiacciano i loro figli sono:
- ContentControls non stringono mai i propri figli (questo include Border, Button, CheckBox, ScrollViewer e molti altri)
- Griglia con una singola riga e colonna
- Griglia con righe e colonne di dimensioni "*"
- DockPanel non stringe il suo ultimo figlio
- TabControl non ne comprime il contenuto
Alcuni esempi di contenitori che schiacciano i loro figli sono:
- StackPanel si comprime nella sua direzione di orientamento
- La griglia con una riga o una colonna di dimensioni "Auto" si restringe in quella direzione
- DockPanel spinge tutti, tranne l'ultimo figlio, nella loro direzione di attracco
- TabControl stringe la sua intestazione (ciò che viene visualizzato nella scheda)
3. Altezza o larghezza esplicite più fuori
È incredibile quante volte vedo Grid o DockPanel con un'altezza e una larghezza esplicite, in questo modo:
<Grid Width="200" Height="100">
<Button Content="I am unnecessarily constrainted by my containing panel" />
</Grid>
In generale non si vuole mai dare a nessun pannello un'altezza o una larghezza esplicite. Il mio primo passo durante la diagnosi dei problemi di layout è rimuovere ogni altezza o larghezza esplicita che riesco a trovare.
4. Window è SizeToContent quando non dovrebbe esserlo
Quando si utilizza SizeToContent, il contenuto verrà ridotto alla dimensione minima. In molte applicazioni questo è molto utile ed è la scelta corretta. Ma se il tuo contenuto non ha dimensioni "naturali", probabilmente vorrai omettere SizeToContent.