Site logo
Site logo
Programmieren aus Leidenschaft
Programmieren aus Leidenschaft

Achtung Content


Eine der revolutionärsten Neuerungen bei WPF Steuerelementen ist die Eigenschaft des Content - zu deutsch Inhalt. Allerdings haben die meisten Steuerelemente und auch Fenster immer nur genau ein Objekt als Content. Einem Fenster also mehre Steuerelemente hinzuzufügen sollte nicht funktionieren und wie Sie im letzten Beispiel gesehen haben, tut es das auch nicht. Natürlich ist so ein Konzept auf den ersten Blick für den Programmieralltag vollkommen unnütz. Aber es gibt für dieses Problem auch eine Lösung: Verschiedene Layoutelemente wie "StackPanel", "Grid" oder "Canvas" können mehrere Steuerelemente aufnehmen und verwalten. Der Content eines Fensters ist dann nicht das Steuerelemente, sondern zum Beispiel ein StackPanel, in dem sich die Steuerelemente befinden.

Beispiel


Waren in der Vergangenheit die Darstellungsmöglichkeiten eines Steuerelementes noch sehr beschränkt, so gibt es diese strengen Limitierungen in der WPF nicht mehr. Hatte man bei einem WinForms-Button die Auswahl zwischen einer Grafik, einem Text oder beidem, so kann der Inhalt eines WPF Button nahezu alles sein. Es ist sogar möglich ein oder mehrere weitere Steuerelemente als Content in einem Button zu verwenden.

Folgendes Beispiel deklariert einen Button, der ein Stackpanel mit zwei CheckBoxen als Content hat.
<Button Width="100" Height="55">
   <StackPanel>
      <CheckBox Margin="3">Checkbox 1</CheckBox>
      <CheckBox Margin="3">Checkbox 2</CheckBox>
   </StackPanel>
</Button>
Ob dieses Beispiel in der Praxis zum Einsatz kommen wird ist fraglich, aber es verdeutlicht sehr gut die Möglichkeiten der Content-Eigenschaft. Sowohl Button als auch Checkbox sind trotz ihrer etwas ungewöhnlichen Anordnung normal nutzbar.

Ein weiteres Beispiel - mit ein wenig mehr Praxisnähe - ist eine ComboBox, die Checkboxen als Content enthält. Auch dieses Element ist auf die ähnliche Art realisierbar.
<ComboBox Height="26" Width ="200" SelectedIndex="0">
   <CheckBox Margin="2">CheckBox 1</CheckBox>
   <CheckBox Margin="2">CheckBox 2</CheckBox>
   <CheckBox Margin="2">CheckBox 3</CheckBox>
</ComboBox>
Was aus nachvollziehbaren Gründen nicht funktioniert ist, einem Element ein "Window" als Content zuzuweisen. Denn ein Fenster kann nur ein Wurzelelement sein. Davon ist wiederum nur ein einziges möglich. Aber Layoutelemente können verschachtelt werden um dadurch eindrucksvolle dynamische Benutzeroberflächen zu erzeugen.
<StackPanel Margin="10">
   <CheckBox Margin="3">Checkbox 1</CheckBox>
   <CheckBox Margin="3">Checkbox 2</CheckBox>
   <CheckBox Margin="3">Checkbox 3</CheckBox>
   <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
      <Button Width="75" Margin="3">OK</Button>
      <Button Width="75" Margin="3">Abbrechen</Button>
   </StackPanel>
</StackPanel>