Freigeben über


Menüübersicht

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

Das Menu-Steuerelement stellt eine Liste von Elementen dar, die Befehle oder Optionen für eine Anwendung angeben. In der Regel öffnet das Klicken auf eine MenuItem ein Untermenü oder bewirkt, dass eine Anwendung einen Befehl durchfü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 verarbeiten, um die Aktion auszuführen.

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

Befehl

Das folgende Beispiel zeigt, wie Sie die Command-Eigenschaft verwenden können, um die Befehle Öffnen und Speichern mit MenuItem Steuerelementen zu verknüpfen. 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 verfügt auch über eine CommandTarget-Eigenschaft, die das Element angibt, in dem der Befehl auftritt. Wenn CommandTarget nicht festgelegt ist, erhält das Element, das den Tastaturfokus hat, den Befehl. Weitere Informationen zu Befehlen finden Sie unter Commanding Overview.

Mit der Steuerelementformatierung können Sie die Darstellung und das Verhalten von Menu Steuerelementen erheblich ändern, ohne ein benutzerdefiniertes Steuerelement schreiben zu müssen. Zusätzlich zum Festlegen visueller Eigenschaften können Sie auch eine Style auf einzelne Teile eines Steuerelements anwenden, das Verhalten von Teilen des Steuerelements durch Eigenschaften ändern oder zusätzliche Teile hinzufügen oder 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 Ressourcenschlüssel verwenden, um die Pinsel zuzuweisen.

<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 mit der Maus über die Menubewegen, ändern sich die Vordergrundfarbe und die Schriftarteigenschaften 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>

Siehe auch