L'équivalent WPF de WinForms de DockStyle.Fill est:
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
valeur par défaut pour les contrôles presque, si en général, vous ne devez pas faire quoi que ce soit d'avoir un contrôle WPF remplir son conteneur parent: Ils le font automatiquement. Cela est vrai pour tous les contenants qui ne pressent pas leurs enfants à la taille minimale.
Erreurs fréquentes
Je vais maintenant expliquer plusieurs erreurs communes qui empêchent HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
de travailler comme prévu.
1. Explicite hauteur ou la largeur
Une erreur commune est de spécifier explicitement une largeur ou la hauteur pour un contrôle. Donc, si vous avez ceci:
<Grid>
<Button Content="Why am I not filling the window?" Width="200" Height="20" />
...
</Grid>
Il suffit de supprimer les attributs Largeur et Hauteur:
<Grid>
<Button Content="Ahhh... problem solved" />
...
</Grid>
2. Contenant panneau de contrôle à la taille serre minimum
Une autre erreur commune est d'avoir la panneau contenant serrant votre contrôle aussi serré qu'il ira.Par exemple, un vertical StackPanel toujours presser son contenu verticalement aussi petits qu'ils vont:
<StackPanel>
<Button Content="Why am I squished flat?" />
</StackPanel>
changement à un autre groupe et vous serez bon pour aller:
<DockPanel>
<Button Content="I am no longer squished." />
</DockPanel>
De plus, toute ligne de grille ou une colonne dont la hauteur est "Auto" écrase de la même manière son contenu dans cette direction.
Quelques exemples de conteneurs qui ne compriment pas leurs enfants sont:
- ContentControls jamais presser leurs enfants (ce qui inclut la frontière, Button, CheckBox, ScrollViewer, et bien d'autres)
- Grille avec un seul ligne et colonne
- Grille avec « * » lignes et colonnes de taille
- DockPanel ne serre pas son dernier enfant
- TabControl ne pas presser son contenu
Quelques exemples de conteneurs qui font presser leurs enfants sont:
- StackPanel serre dans sa direction d'orientation
- Grille avec une ligne « automatique » de taille ou de la colonne serre dans cette direction
- DockPanel comprime tous sauf son dernier enfant dans leur direction de dock
- TabControl serre son en-tête (ce qui est affiché sur l'onglet)
3. explicite hauteur ou la largeur plus loin
Il est étonnant de voir combien de fois je vois Grille ou DockPanel donné une hauteur explicite et la largeur, comme ceci:
<Grid Width="200" Height="100">
<Button Content="I am unnecessarily constrainted by my containing panel" />
</Grid>
En général, vous ne voulez jamais donner à n'importe quel panneau une hauteur ou largeur explicite. Ma première étape pour diagnostiquer les problèmes de mise en page consiste à supprimer chaque hauteur ou largeur explicite que je peux trouver.
4. Fenêtre est SizeToContent quand il ne doit pas être
Lorsque vous utilisez SizeToContent, votre contenu sera pressé à la taille minimale. Dans de nombreuses applications, c'est très utile et c'est le bon choix. Mais si votre contenu n'a pas de taille "naturelle", vous voudrez probablement omettre SizeToContent.
J'ai laissé une question assez complexe [nouvelle mise en page ici] (http://stackoverflow.com/questions/3326623/multiple-grid-layout-wpf). Après avoir lu votre réponse, je pense que vous pouvez comprendre. Cheers – Berryl
Excellente réponse! J'aimerais pouvoir vous donner des points bonus. :) –
@Jim Raden: Vous pouvez ajouter une prime à cette question et attribuer les points à Ray Burns;) – citronas