21.8 Menüleiste
Die Menüleiste wird durch die Klasse Menu beschrieben, die untergeordneten Menüpunkte durch MenuItem. Trennstriche werden durch Separator beschrieben. Eine typische Struktur zeigt das nächste Codefragment:
<DockPanel> <Menu DockPanel.Dock="Top" Name="mnuMenu"> <MenuItem Header="_Datei"> <MenuItem Header="_Neu" /> <MenuItem Header="_Öffnen" /> <Separator /> <MenuItem Header="_Speichern" /> <MenuItem Header="Speichern _unter ..." /> <Separator /> <MenuItem Header="_Senden an"> <MenuItem Header="_Mail" /> <MenuItem Header="_Desktop" /> </MenuItem> <MenuItem Header="_Beenden" /> </MenuItem> <MenuItem Header="_Bearbeiten" /> <MenuItem Header="_Hilfe" /> </Menu> <StackPanel> </StackPanel> </DockPanel>
Menüs stehen meistens am Fensterrand. Zur Positionierung bietet sich das DockPanel an. Im Menü selbst wird die Eigenschaft DockPanel.Dock auf Top festgelegt. Um den verbleibenden Bereich auszufüllen, ist im Code nach Menu noch ein StackPanel.
Das Hauptmenü bilden die Menüelemente auf oberster Ebene, direkt unterhalb von Menu. Jedes Menüelement ist vom Typ MenuItem und kann selbst wieder Menüelemente enthalten, in XAML als Kindelemente des MenuItem-Elements. Den Namen eines Menüelements legt das Attribut Header fest. So wie bei anderen Steuerelementen auch, kann mit einem Unterstrich ein Access-Key festgelegt werden.
In Abbildung 21.7 sehen Sie die Ausgabe des XAML-Codes.
Abbildung 21.7 Menü
Die Programmierung erfolgt wie üblich. Die Funktionalität der Menüelemente wird in den Handlern ihrer Click-Ereignisse codiert.
21.8.1 Gestaltung der Menüelemente
Von den vielen Eigenschaften der Klasse MenuItem greife ich hier in Tabelle 21.6 exemplarisch vier heraus.
Eigenschaft | Beschreibung |
Icon |
Ein neben dem Menütext angezeigtes Bild |
IsCheckable |
Gibt an, ob ein MenuItem markiert werden kann und ein Häkchen bekommt. |
IsChecked |
Gibt an, ob ein MenuItem markiert ist. |
InputGestureText |
Beschreibt die Tastenkombination. |
21.8.2 Symbole anzeigen
Die Eigenschaft Icon spezifiziert ein neben dem Menütext anzuzeigendes Bild vom Typ Image. Die Bilddatei gibt dessen Attribut Source an. Das Bild binden Sie mit der verbundenen Eigenschaft MenuItem.Icon an. Im folgenden Codeabschnitt wird die oben gezeigte Menü-leiste um zwei Symbole ergänzt (siehe Abbildung 21.8).
<DockPanel> <Menu DockPanel.Dock="Top" Name="mnuMenu"> <MenuItem Header="_Datei"> <MenuItem Header="_Neu" /> <MenuItem Header="_Öffnen"> <MenuItem.Icon> <Image Source="Bilder/DateiÖffnen.png" /> </MenuItem.Icon> </MenuItem> <Separator /> <MenuItem Header="_Speichern"> <MenuItem.Icon> <Image Source="Bilder/DateiSpeichern.png" /> </MenuItem.Icon> </MenuItem>’ ...
21.8.3 Tastenkürzel
Um ein Menüelement über die Tastatur ansprechen zu können, setzen Sie vor einen Buchstaben einen Unterstrich. Zur Laufzeit selektiert die Kombination -Buchstabe das Menüelement. Mit der Eigenschaft InputGestureText definieren Sie ein Tastenkürzel zur Aktivierung eines Menüelements, das im Menü angezeigt wird (siehe Abbildung 21.8).
<MenuItem Header="_Öffnen" InputGestureText="Strg+O">
...
</MenuItem>
Noch reagiert das Menüelement nicht auf das zuletzt definierte Tastenkürzel. Es muss noch mit einem Kommando verbunden werden, das wir im Abschnitt 22.5, »Kommandos«, besprechen.
Abbildung 21.8 Menü mit Symbolen und Shortcuts
21.8.4 Selektierbare Menüelemente
Manche Menüelemente sind Ein-/Ausschaltern ähnlich. Sie signalisieren ihren augenblicklichen Zustand durch ein Häkchen. Solch ein Menüelement erzeugen Sie mittels der Eigenschaft IsCheckable, der aktuelle Zustand ist in IsChecked gespeichert.
<MenuItem Header="Schriftstil"> <MenuItem Header="Fett" IsCheckable="True" IsChecked="True" /> <MenuItem Header="Kursiv" IsCheckable="True" IsChecked="False" /> </MenuItem>
Ist für ein Menüelement IsEnabled auf False gesetzt, ist es »ausgegraut« und inaktiv.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.