Condividi tramite


Cenni preliminari sulla classe Menu

La classe Menu consente di organizzare elementi associati a comandi e gestori eventi in un ordine gerarchico. Ogni elemento Menu contiene un insieme di elementi MenuItem.

Nel presente argomento sono contenute le seguenti sezioni.

  • Controllo Menu
  • Creazione di menu
  • Oggetti MenuItem con tasti di scelta rapida
  • Stili dei controlli menu
  • Argomenti correlati

Controllo Menu

Il controllo Menu offre un elenco di voci che specificano comandi o opzioni per un'applicazione. In genere, quando si fa clic su un oggetto MenuItem viene aperto un sottomenu oppure si esegue un comando in un'applicazione.

Creazione di menu

Nell'esempio riportato di seguito viene creato un oggetto Menu per modificare il testo in un oggetto TextBox. Menu contiene oggetti MenuItem che utilizzano le proprietà Command, IsCheckable e Header nonché gli eventi Checked, Unchecked e 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 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

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

Oggetti MenuItem con tasti di scelta rapida

I tasti di scelta rapida sono combinazioni di caratteri che è possibile digitare dalla tastiera per richiamare comandi Menu. Ad esempio, la scelta rapida per Copia è CTRL+C. Sono disponibili due proprietà da utilizzare con i tasti di scelta rapida e le voci di menu: InputGestureText oppure Command.

InputGestureText

Nell'esempio riportato di seguito viene illustrato come utilizzare la proprietà InputGestureText per assegnare il testo del tasto di scelta rapida ai controlli MenuItem. In questo modo viene solo posizionato il tasto di scelta rapida nella voce di menu. Il comando non viene associato all'oggetto MenuItem. Per eseguire l'azione, l'input dell'utente deve essere gestito dall'applicazione.

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

Command

Nell'esempio riportato di seguito viene illustrato come utilizzare la proprietà Command per associare i comandi Apri e Salva ai controlli MenuItem. La proprietà Command non associa solo un comando a un controllo MenuItem, ma fornisce anche il testo di input da utilizzare come scelta rapida.

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

La classe MenuItem dispone anche di una proprietà CommandTarget, che specifica l'elemento in cui si verifica il comando. Se la proprietà CommandTarget non è impostata, il comando viene ricevuto dall'elemento con lo stato attivo. Per ulteriori informazioni sui comandi, vedere Cenni preliminari sull'esecuzione di comandi.

Stili dei controlli menu

Con gli stili dei controlli, è possibile modificare in modo significativo l'aspetto e il comportamento dei controlli Menu senza scrivere un controllo personalizzato. Oltre a impostare proprietà di visualizzazione, è anche possibile applicare un oggetto Style a singole parti di un controllo, modificare il comportamento di parti del controllo tramite le proprietà, aggiungere parti supplementari o modificare il layout di un controllo. Negli esempi riportati di seguito vengono illustrati vari metodi per aggiungere un oggetto Style a un controllo Menu.

Nel primo esempio di codice viene definito un oggetto Style denominato Simple in cui viene illustrato come utilizzare le impostazioni di sistema correnti nello stile. Nel codice il colore di MenuHighlightBrush viene assegnato come colore di sfondo del menu e il colore di MenuTextBrush come colore di primo piano del menu. Si noti che per assegnare i pennelli vengono utilizzate chiavi di risorse.

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

Nell'esempio riportato di seguito vengono utilizzati elementi Trigger che consentono di modificare l'aspetto di un oggetto MenuItem in risposta a eventi che si verificano nel controllo Menu. Quando si sposta il mouse su Menu, cambiano il colore di primo piano e le caratteristiche del tipo di carattere delle voci di menu.

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

Vedere anche

Altre risorse

Esempio di raccolta di controlli WPF