Layouting in WPF ist viel flexibler und mächtiger als in Windows Forms, aber auch viel komplexer. In Windows Forms gibt es Anchoring und Docking, um das Verhalten der Steuerelemente bei Änderung der Fenstergröße zu steuern. In WPF beeinflussen viele Faktoren die Anordnung der Steuerelemente, einer davon sind die Panel-Elemente.
In der MSDN-Library findet sich eine Beschreibung des WPF-Layoutsystems. Die wichtigsten Panel-Elemente sind:
| Canvas | Definiert einen Bereich, in dem Elemente explizit mit Koordinaten relativ zu diesem Bereich positioniert werden. |
| StackPanel | Die Elemente werden entweder horizontal oder vertikal in einer Linie angeordnet. |
| DockPanel | Die Elemente werden an den Rändern positioniert oder füllen den inneren Restbereich. |
| WrapPanel | Die Elemente werden sequentiell von links nach rechts angeordnet und in die nächste Zeile umgebrochen, wenn am Ende einer Zeile kein Platz mehr ist. |
| Grid | Definiert einen flexiblen Gitterbereich, der aus Spalten und Zeilen besteht. |
Mehr Informationen über die verschiedenen Panel-Elemente gibt es im Artikel Panel Overview.
Nicht nur die richtige Auswahl des Panel-Elements beeinflusst das Layout, einige Steuerelement-Eigenschaften haben ebenfalls Auswirkungen auf die Anordnung der Steuerelemente. Die wichtigsten Eigenschaften mit Einfluss auf das Layout sind:
| HorizontalAlignment | Definiert, wie das Element horizontal innerhalb des Parent-Elements positioniert werden soll. Für diese Eigenschaft gibt es vier mögliche Werte: Left, Center, Right, Stretch. |
| VerticalAlignment | Definiert, wie das Element vertikal innerhalb des Parent-Elements positioniert werden soll. Für diese Eigenschaft gibt es vier mögliche Werte: Top, Center, Bottom, Stretch. |
| Margin | Definiert den Abstand zwischen dem Element und dem Elternelement oder den Geschwisterelementen. |
| Padding | Definiert den Abstand zwischen dem Rand eines Steuerelements und seinen Kindelementen. |
Detailliertere Informationen über den Bedeutung dieser Eigenschaften gibt es in der MSDN-Library.
Nicht jede Eigenschaft ist in jedem Panel sinnvoll. Folgende Tabelle zeigt die Wirkung bestimmter Kombinationen von Eigenschaften und Panel-Elementen:
| Canvas | Margin | Teilweise: An den zwei Seiten, die für die Positionierung relevant sind, werden die entsprechenden Elemente des Margin-Werts hinzuaddiert. |
| HorizontalAlignment | Nein | |
| VerticalAlignment | Nein | |
| StackPanel | Margin | Ja |
| HorizontalAlignment | Teilweise: Nur, wenn Orientation Vertical ist. | |
| VerticalAlignment | Teilweise: Nur, wenn Orientation Horizontal ist. | |
| DockPanel | Margin | Ja |
| HorizontalAlignment | Teilweise: Wenn Dock den Wert Left oder Right hat, ist diese Eigenschaft sinnlos. | |
| VerticalAlignment | Teilweise: Wenn Dock den Wert Top oder Bottom hat, ist diese Eigenschaft sinnlos. | |
| WrapPanel | Margin | Ja |
| HorizontalAlignment | Teilweise: Wenn Orientation Vertical ist oder ItemWidth genug Extraraum lässt. | |
| VerticalAlignment | Teilweise: Wenn Orientation Horizontal ist oder ItemHeight genug Extraraum lässt. | |
| Grid | Margin | Ja |
| HorizontalAlignment | Ja | |
| VerticalAlignment | Ja |
Welche Vorteile hat der WPF-Layoutmechanismus, der im Vergleich zu Windows Forms viel komplexer ist?
- Der Entwickler kann besser kontrollieren, wie sich die Anordnung der Steuerelemente verhalten soll, wenn der Benutzer die Größe des Fensters ändert. Das konnte aber bereits in Windows Forms mit dem Anchoring oder dem Docking erreicht werden.
- Die Steuerelemente können ihre Größe und Position automatisch anpassen, wenn bei einer lokalisierten Anwendung die Texte der Übersetzungen länger sind. Darüber gibt es wieder einen Artikel in der MSDN-Library.
Es gibt weitere Panel-Elemente, die ich in diesem Artikel nicht berücksichtigt habe. Diese sind zum größten Teil nur für die Entwicklung eigener Steuerelemente relevant. Außerdem können eigene Panel-Elemente entwickelt werden, wenn die Vorgefertigten nicht ausreichen.