18.9 Verschachtelte Layoutcontainer 

Sie haben nun die Layoutcontainer und deren Einsatzmöglichkeiten kennengelernt. Wenn Sie eine etwas aufwendigere Form bereitstellen wollen, werden Sie mit Sicherheit nicht mit einem Layoutcontainer auskommen. Meistens werden Sie mehrere ineinander verschachtelte Container einsetzen. Die Oberflächengestaltung ist also nicht ganz so einfach wie bei den WinForms und am Anfang ziemlich gewöhnungsbedürftig. Der Ad-hoc-Entwurf einer Form dürfte mit WPF wohl nur mit sehr viel Übung und Erfahrung zu realisieren sein.
Da wir nun der Reihe nach die Layoutcontainer mit einfachem XAML-Beispielcode im Einsatz erlebt haben, ist es an der Zeit, eine etwas aufwendigere Form zu erstellen. Darin sind bereits Controls enthalten, über die erst gesprochen werden muss, aber zu gestalterischen Zwecken erübrigt sich an dieser Stelle wohl eine Erklärung. Zudem ist auch kein Programmcode hinterlegt, da es uns vorrangig auf die Oberflächengestaltung ankommt. Sehen wir uns das Window zur Laufzeit an (Abbildung 18.23).
Abbildung 18.23 Ausgabe des Beispielprogramms »Personenliste«
Im Window sind neben mehreren Buttons auch zwei Checkboxen, zwei Radiobuttons, eine Listbox und ein Label vertreten. Um eine solche Form zu gestalten, werden Sie zumindest am Anfang noch einmal zu Papier und Bleistift greifen. Lösungen gibt es viele. Ich möchte Ihnen an dieser Stelle die folgende zeigen:
// ------------------------------------------------------------------ // Beispiel: ... \Kapitel 18\PersonenListe // ------------------------------------------------------------------ <Window ... Height="250" Width="450"> <DockPanel> <StackPanel DockPanel.Dock="Bottom" Height="Auto" HorizontalAlignment="Right" Orientation="Horizontal"> <Button Width="100" Margin="3">OK</Button> <Button Width="100" Margin="3">Beenden</Button> </StackPanel> <Grid DockPanel.Dock="Bottom" Height="Auto"> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition Height="11"/> </Grid.RowDefinitions> <CheckBox Margin="2" Grid.Row="0" Grid.Column="0">Freund</CheckBox> <RadioButton Margin="2" Grid.Row="0" Grid.Column="1">Frau</RadioButton> <CheckBox Margin="2" Grid.Row="1" Grid.Column="0">Arbeitskollege</CheckBox> <RadioButton Margin="2" Grid.Row="1" Grid.Column="1" IsChecked="True">Herr</RadioButton> </Grid> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition /> <RowDefinition Height="11"/> </Grid.RowDefinitions> <Label Grid.Row="0" Grid.Column="0" Background="Black" Foreground="WhiteSmoke">Liste aller bekannten Personen:</Label> <ListBox Margin="5,5" Grid.Row="1" Background="WhiteSmoke"> <ListBoxItem>Peter Müller</ListBoxItem> <ListBoxItem>Andreas Fischer</ListBoxItem> <ListBoxItem>Conie Serna</ListBoxItem> <ListBoxItem>Franz Schulze</ListBoxItem> <ListBoxItem>Beate Meier</ListBoxItem> </ListBox> <StackPanel Grid.Row="1" Grid.Column="1"> <Button Margin="3">Neue Person</Button> <Button Margin="3">Löschen</Button> </StackPanel> </Grid> </DockPanel> </Window>