El equivalente de WPF de DockStyle.Fill de WinForms es:
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Este es el valor predeterminado para casi los controles, por lo que, en general, no tiene que hacer nada para que un control WPF llene su contenedor principal : lo hacen automáticamente. Esto es cierto para todos los recipientes que no aprietan a sus hijos al tamaño mínimo.
Errores comunes
Ahora explicaré varios errores comunes que impiden que HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
funcione como se esperaba.
1. Alto o ancho explícito
Un error común es especificar explícitamente un Ancho o Alto para un control. Entonces, si tienes esto:
<Grid>
<Button Content="Why am I not filling the window?" Width="200" Height="20" />
...
</Grid>
Simplemente elimine los atributos Ancho y Alto:
<Grid>
<Button Content="Ahhh... problem solved" />
...
</Grid>
2. El panel de contención reduce el control al tamaño mínimo
Otro error común es hacer que el panel de contención apriete su control tanto como sea posible. Por ejemplo, un StackPanel vertical siempre exprimirá su contenido verticalmente tan pequeño como sea posible:
<StackPanel>
<Button Content="Why am I squished flat?" />
</StackPanel>
Cambie a otro Panel y estará listo para comenzar:
<DockPanel>
<Button Content="I am no longer squished." />
</DockPanel>
Además, cualquier fila o columna de la cuadrícula cuya altura sea "Auto" exprimirá de manera similar su contenido en esa dirección.
Algunos ejemplos de recipientes que no aprietan a sus hijos son:
- ContentControls nunca aprieta a sus hijos (esto incluye Border, Button, CheckBox, ScrollViewer y muchos otros)
- Cuadrícula con una sola fila y columna
- Cuadrícula con filas y columnas de tamaño "*"
- DockPanel no aprieta a su último hijo
- TabControl no aprieta su contenido
Algunos ejemplos de recipientes que sí exprimen a sus hijos son:
- StackPanel aprieta en su dirección de orientación
- La cuadrícula con una fila o columna de tamaño "automático" se aprieta en esa dirección
- DockPanel aprieta a todos menos a su último hijo en la dirección de su muelle
- TabControl aprieta su encabezado (lo que se muestra en la pestaña)
3. Alto o ancho explícito más lejos
Es asombroso cuántas veces veo Grid o DockPanel con una altura y un ancho explícitos, como este:
<Grid Width="200" Height="100">
<Button Content="I am unnecessarily constrainted by my containing panel" />
</Grid>
En general, nunca querrá darle a ningún Panel una Altura o Anchura explícita. Mi primer paso al diagnosticar problemas de diseño es eliminar cada Alto o Ancho explícito que pueda encontrar.
4. La ventana es SizeToContent cuando no debería ser
Cuando usa SizeToContent, su contenido se reducirá al tamaño mínimo. En muchas aplicaciones esto es muy útil y es la elección correcta. Pero si su contenido no tiene un tamaño "natural", probablemente querrá omitir SizeToContent.