Lire en anglais

Partager via


Vue d’ensemble du menu

La classe Menu vous permet d’organiser les éléments associés aux commandes et aux gestionnaires d’événements dans un ordre hiérarchique. Chaque élément Menu contient une collection d’éléments MenuItem.

Le contrôle Menu présente une liste d’éléments qui spécifient des commandes ou des options pour une application. En règle générale, cliquer sur un MenuItem ouvre un sous-menu ou provoque l’exécution d’une commande par une application.

Création de menus

L’exemple suivant crée un Menu pour manipuler du texte dans un TextBox. Le Menu contient des objets MenuItem qui utilisent les propriétés Command, IsCheckableet Header et les Checked, les Uncheckedet les événements Click.

<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

Les raccourcis clavier sont des combinaisons de caractères qui peuvent être entrées avec le clavier pour appeler des commandes Menu. Par exemple, le raccourci pour Copier est Ctrl+C. Il existe deux propriétés à utiliser avec les raccourcis clavier et les éléments de menu :InputGestureText ou Command.

InputGestureText

L’exemple suivant montre comment utiliser la propriété InputGestureText pour attribuer du texte de raccourci clavier aux contrôles MenuItem. Cela place uniquement le raccourci clavier dans l’élément de menu. Il n’associe pas la commande au MenuItem. L’application doit gérer l’entrée de l’utilisateur pour effectuer l’action.

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

Commande

L’exemple suivant montre comment utiliser la propriété Command pour associer les commandes Ouvrir et Enregistrer aux contrôles MenuItem. Non seulement la propriété de commande associe une commande à un MenuItem, mais elle fournit également le texte du geste d'entrée à utiliser comme raccourci.

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

La classe MenuItem a également une propriété CommandTarget, qui spécifie l’élément où la commande se produit. Si CommandTarget n’est pas défini, l’élément qui a le focus clavier reçoit la commande. Pour plus d’informations sur les commandes, consultez Vue d’ensemble des commandes.

Avec le style de contrôle, vous pouvez modifier considérablement l’apparence et le comportement des contrôles Menu sans avoir à écrire un contrôle personnalisé. En plus de définir des propriétés visuelles, vous pouvez également appliquer une Style à des parties individuelles d’un contrôle, modifier le comportement des parties du contrôle par le biais de propriétés, ou ajouter des parties supplémentaires ou modifier la disposition d’un contrôle. Les exemples suivants illustrent plusieurs façons d’ajouter un Style à un contrôle Menu.

Le premier exemple de code définit une Style appelée Simple qui montre comment utiliser les paramètres système actuels dans votre style. Le code affecte la couleur du MenuHighlightBrush comme couleur d’arrière-plan du menu et le MenuTextBrush comme couleur de premier plan du menu. Notez que vous utilisez des clés de ressource pour affecter les pinceaux.

<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>

L’exemple suivant utilise des éléments Trigger qui vous permettent de modifier l’apparence d’un MenuItem en réponse aux événements qui se produisent sur le Menu. Lorsque vous déplacez la souris sur le Menu, la couleur de premier plan et les caractéristiques de police des éléments de menu changent.

<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>

Voir aussi