Übersicht über Menu

Mit der Menu-Klasse können Sie Elemente, die Befehlen und Ereignishandlern zugeordnet sind, in einer hierarchischen Reihenfolge organisieren. Jedes Menu-Element enthält eine Auflistung von MenuItem-Elementen.

Das Menu-Steuerelement stellt eine Liste von Elementen dar, die Befehle oder Optionen für eine Anwendung angeben. In der Regel wird durch Klicken auf ein MenuItem-Element ein Untermenü geöffnet oder ein Befehl durch eine Anwendung ausgeführt.

Erstellen von Menüs

Im folgenden Beispiel wird ein Menu erstellt, um Text in einem TextBox zu bearbeiten. Das Menu enthält MenuItem-Objekte, die die Eigenschaften Command, IsCheckable und Header sowie die Ereignisse Checked, Unchecked und Click verwenden.

<Menu>
  <MenuItem Header="_Edit">
    <MenuItem Command="ApplicationCommands.Copy"/>
    <MenuItem Command="ApplicationCommands.Cut"/>
    <MenuItem Command="ApplicationCommands.Paste"/>
  </MenuItem>
  <MenuItem Header="_Font">
    <MenuItem Header="_Bold" IsCheckable="True"
              Checked="Bold_Checked"
              Unchecked="Bold_Unchecked"/>
    <MenuItem Header="_Italic" IsCheckable="True"
              Checked="Italic_Checked"
              Unchecked="Italic_Unchecked"/>
    <Separator/>
    <MenuItem Header="I_ncrease Font Size"
              Click="IncreaseFont_Click"/>
    <MenuItem Header="_Decrease Font Size"
              Click="DecreaseFont_Click"/>
  </MenuItem>
</Menu>
<TextBox Name="textBox1" TextWrapping="Wrap"
         Margin="2">
  The quick brown fox jumps over the lazy dog.
</TextBox>

private void Bold_Checked(object sender, RoutedEventArgs e)
{
    textBox1.FontWeight = FontWeights.Bold;
}

private void Bold_Unchecked(object sender, RoutedEventArgs e)
{
    textBox1.FontWeight = FontWeights.Normal;
}

private void Italic_Checked(object sender, RoutedEventArgs e)
{
    textBox1.FontStyle = FontStyles.Italic;
}

private void Italic_Unchecked(object sender, RoutedEventArgs e)
{
    textBox1.FontStyle = FontStyles.Normal;
}

private void IncreaseFont_Click(object sender, RoutedEventArgs e)
{
    if (textBox1.FontSize < 18)
    {
        textBox1.FontSize += 2;
    }
}

private void DecreaseFont_Click(object sender, RoutedEventArgs e)
{
    if (textBox1.FontSize > 10)
    {
        textBox1.FontSize -= 2;
    }
}

Private Sub Bold_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontWeight = FontWeights.Bold
End Sub

Private Sub Bold_Unchecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontWeight = FontWeights.Normal
End Sub

Private Sub Italic_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontStyle = FontStyles.Italic
End Sub

Private Sub Italic_Unchecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontStyle = FontStyles.Normal
End Sub

Private Sub IncreaseFont_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If textBox1.FontSize < 18 Then
        textBox1.FontSize += 2
    End If
End Sub

Private Sub DecreaseFont_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If textBox1.FontSize > 10 Then
        textBox1.FontSize -= 2
    End If
End Sub

Tastenkombinationen sind Zeichenkombinationen, die mit der Tastatur eingegeben werden können, um Menu-Befehle aufzurufen. Die Tastenkombination für Kopieren ist beispielsweise STRG+C. Es gibt zwei Eigenschaften, die mit Tastenkombinationen und Menüelementen verwendet werden sollen: InputGestureText oder Command.

InputGestureText

Das folgende Beispiel veranschaulicht die Verwendung der InputGestureText-Eigenschaft zum Zuweisen von Tastenkombinationen zu MenuItem-Steuerelementen. Dadurch wird nur die Tastenkombination im Menüelement platziert. Der Befehl wird jedoch nicht dem MenuItem zugeordnet. Die Anwendung muss die Eingabe des Benutzers bearbeiten, um die Aktion auszuführen.

<MenuItem Header="_Cut" InputGestureText="Ctrl+X"/>
<MenuItem Header="_Find" InputGestureText="Ctrl+F"/>

Get-Help

Das folgende Beispiel veranschaulicht die Verwendung der Command-Eigenschaft zum Zuweisen der Befehle Öffnen und Speichern zu MenuItem-Steuerelementen. Die command-Eigenschaft ordnet nicht nur einen Befehl einem MenuItem zu, sondern stellt auch den Text für die Eingabegeste bereit, der als Tastenkombination verwendet wird.

<MenuItem Header="_Open" Command="ApplicationCommands.Open"/>
<MenuItem Header="_Save" Command="ApplicationCommands.Save"/>

Die MenuItem-Klasse enthält ebenfalls eine CommandTarget-Eigenschaft, die das Element angibt, in dem der Befehl auftritt. Wenn CommandTarget nicht festgelegt ist, empfängt das Element mit dem Tastaturfokus den Befehl. Weitere Informationen zu Befehlen finden Sie unter Befehlsübersicht.

Mithilfe des Steuerelementformats können Sie die Darstellung und das Verhalten von Menu-Steuerelementen drastisch ändern, ohne ein benutzerdefiniertes Steuerelement schreiben zu müssen. Zusätzlich zur Festlegung von visuellen Eigenschaften können Sie auch ein Style-Element auf einzelne Teile eines Steuerelements anwenden, das Verhalten von Teilen des Steuerelements durch Eigenschaften ändern oder zusätzliche Teile hinzufügen bzw. das Layout eines Steuerelements ändern. In den folgenden Beispielen werden mehrere Möglichkeiten zum Hinzufügen eines Style zu einem Menu-Steuerelement gezeigt.

Im ersten Beispiel wird ein Style mit der Bezeichnung Simple definiert. An diesem Beispiel können Sie sehen, wie die aktuellen Systemeinstellungen in Ihrem Stil verwendet werden können. Der Code weist die Farbe von MenuHighlightBrush als Hintergrundfarbe des Menüs und die Farbe von MenuTextBrush als Vordergrundfarbe des Menüs zu. Beachten Sie, dass Sie zum Zuweisen der Pinsel Ressourcenschlüssel verwenden.

<Style x:Key="Simple" TargetType="{x:Type MenuItem}">
  <Setter Property = "Background" Value= "{DynamicResource {x:Static SystemColors.MenuHighlightBrushKey}}"/>
  <Setter Property = "Foreground" Value= "{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/>
  <Setter Property = "Height" Value= "{DynamicResource {x:Static SystemParameters.CaptionHeightKey}}"/>
</Style>

Das folgende Beispiel verwendet die Trigger-Elemente, die Ihnen ermöglichen, die Darstellung eines MenuItem-Elements als Reaktion auf Ereignisse zu ändern, die beim Menu-Element auftreten. Wenn Sie den Mauszeiger auf das Menu-Element bewegen, ändern sich die Vordergrundfarbe und die Schriftart der Menüelemente.

<Style x:Key="Triggers" TargetType="{x:Type MenuItem}">
  <Style.Triggers>
    <Trigger Property="MenuItem.IsMouseOver" Value="true">
      <Setter Property = "Foreground" Value="Red"/>
      <Setter Property = "FontSize" Value="16"/>
      <Setter Property = "FontStyle" Value="Italic"/>
    </Trigger>
  </Style.Triggers>
</Style>

Weitere Informationen