Das WPF-Äquivalent von WinForms 'DockStyle.Fill lautet:
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Dies ist die Standardeinstellung für fast Steuerelemente. Sie müssen also im Allgemeinen überhaupt nichts tun, damit ein WPF-Steuerelement seinen übergeordneten Container füllt : Dies geschieht automatisch. Dies gilt für alle Container, die ihre Kinder nicht auf die Mindestgröße drücken.
Häufige Fehler
Ich werde nun einige häufige Fehler erklären, die verhindern, dass HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
sie wie erwartet funktionieren.
1. Explizite Höhe oder Breite
Ein häufiger Fehler besteht darin, eine Breite oder Höhe für ein Steuerelement explizit anzugeben. Also, wenn Sie dies haben:
<Grid>
<Button Content="Why am I not filling the window?" Width="200" Height="20" />
...
</Grid>
Entfernen Sie einfach die Attribute Breite und Höhe:
<Grid>
<Button Content="Ahhh... problem solved" />
...
</Grid>
2. Das Bedienfeld drückt die Steuerung auf die Mindestgröße
Ein weiterer häufiger Fehler besteht darin, dass das enthaltene Bedienfeld Ihre Steuerung so fest wie möglich drückt. Zum Beispiel drückt ein vertikales StackPanel seinen Inhalt immer vertikal so klein wie möglich:
<StackPanel>
<Button Content="Why am I squished flat?" />
</StackPanel>
Wechseln Sie zu einem anderen Panel und Sie können loslegen:
<DockPanel>
<Button Content="I am no longer squished." />
</DockPanel>
Außerdem wird jede Rasterzeile oder -spalte mit der Höhe "Auto" auf ähnliche Weise ihren Inhalt in diese Richtung drücken.
Einige Beispiele für Behälter, die ihre Kinder nicht quetschen, sind:
- ContentControls quetschen niemals ihre Kinder (dazu gehören Border, Button, CheckBox, ScrollViewer und viele andere).
- Raster mit einer einzelnen Zeile und Spalte
- Raster mit Zeilen und Spalten der Größe "*"
- DockPanel drückt sein letztes Kind nicht zusammen
- TabControl drückt seinen Inhalt nicht zusammen
Einige Beispiele für Behälter, die ihre Kinder quetschen, sind:
- StackPanel drückt in seiner Ausrichtungsrichtung
- Das Raster mit einer Zeile oder Spalte in der Größe "Auto" wird in diese Richtung gedrückt
- DockPanel drückt alle bis auf das letzte Kind in ihre Dockrichtung
- TabControl drückt seinen Header (was auf der Registerkarte angezeigt wird)
3. Explizite Höhe oder Breite weiter außen
Es ist erstaunlich, wie oft ich Grid oder DockPanel mit einer expliziten Höhe und Breite sehe, wie folgt:
<Grid Width="200" Height="100">
<Button Content="I am unnecessarily constrainted by my containing panel" />
</Grid>
Im Allgemeinen möchten Sie keinem Panel eine explizite Höhe oder Breite zuweisen. Mein erster Schritt bei der Diagnose von Layoutproblemen besteht darin, jede explizite Höhe oder Breite zu entfernen, die ich finden kann.
4. Das Fenster ist SizeToContent, wenn es nicht sein sollte
Wenn Sie SizeToContent verwenden, wird Ihr Inhalt auf die Mindestgröße komprimiert. In vielen Anwendungen ist dies sehr nützlich und die richtige Wahl. Wenn Ihr Inhalt jedoch keine "natürliche" Größe hat, sollten Sie SizeToContent wahrscheinlich weglassen.