18.5 WrapPanel 

Das WrapPanel ähnelt dem StackPanel. Die Komponenten werden der Reihe nach hinzugefügt, entweder zeilen- oder spaltenweise. Die Standardvorgabe ist zeilenweise. Passen alle Steuerelemente nicht in eine Zeile (oder Spalte), wird eine neue Zeile oder Spalte angefangen. Bei Bedarf umbricht das WrapPanel in die nächste Zeile oder Spalte, je nach Einstellung.
Die Höhe einer Zeile orientiert sich am Platzbedarf des Steuerelements mit der größten Höhe. Enthält eine Zeile beispielweise mehrere Buttons, von denen einer sich durch die explizite Angabe von Height oder durch Einstellung der Eigenschaft Margin von den anderen unterscheidet, wird sich die Höhe aller anderen Buttons entsprechend einstellen – allerdings auch nur in der Zeile, in der der Button mit der abweichenden Höhe auftritt. Die umbrochene Zeile ist davon nicht betroffen und bewertet nur die in ihr auftretenden Elemente.
<WrapPanel> <Button Margin="10">Button 1</Button> <Button>Button 2</Button><Button>Button 3</Button> <Button>Button 4</Button><Button>Button 5</Button> <Button>Button 6</Button> <Button>Button 7</Button> </WrapPanel>
Abbildung 18.12 zeigt die Ausgabe des Programmcodes zur Laufzeit. Dabei wurde die Fensterbreite so weit reduziert, dass zwei Schaltflächen in der zweiten Zeile angezeigt werden.
Die Zeilenbreite lässt sich auch mit der Eigenschaft ItemHeight beeinflussen. Die Vorgabeeinstellung lautet Auto. Geben Sie einen Wert an, wird dieser für die Darstellung benutzt. Dabei sollten Sie aber vorsichtig sein, da ein zu geringer Wert dazu führen kann, dass ein Steuerelement möglicherweise nicht mehr korrekt angezeigt wird. Lassen Sie sich die Elemente spaltenweise anzeigen, müssen Sie statt der Eigenschaft ItemHeight die Eigenschaft ItemWidth einstellen.
Abbildung 18.12 Elementanordnung in einem WrapPanel
Die Eigenschaft Orientation dient dazu, die Richtung der Anordnung der Elemente vorzugeben. Mögliche Werte sind Horizontal und Vertical. Dabei werden die Steuerelemente von links nach rechts bzw. von oben nach unten angeordnet. Mit der Eigenschaft FlowDirection und der Einstellung RightToLeft können Sie Controls aber auch von rechts nach links und von unten nach oben der Reihe nach anordnen.