Condividi tramite


Panoramica di ContextMenu

La classe ContextMenu rappresenta l'elemento che espone la funzionalità usando un Menuspecifico al contesto. In genere, un utente espone il ContextMenu nell'interfaccia utente facendo clic con il pulsante destro del mouse. Questo argomento presenta l'elemento ContextMenu e fornisce esempi di come usarlo in XAML (Extensible Application Markup Language) e nel codice.

Controllo ContextMenu

Un ContextMenu è collegato a un controllo specifico. L'elemento ContextMenu consente di presentare agli utenti un elenco di elementi che specificano comandi o opzioni associati a un determinato controllo, ad esempio un Button. Gli utenti fanno clic con il pulsante destro del mouse sul controllo per visualizzare il menu. In genere, facendo clic su un MenuItem si apre un sottomenu o si determina l'esecuzione di un comando da parte di un'applicazione.

Creazione di menu contestuali

Negli esempi seguenti viene illustrato come creare un ContextMenu con sottomenu. I controlli ContextMenu sono associati ai controlli dei pulsanti.

<Button Name="cmButton" Height="30">
  Button with Context Menu
  <Button.ContextMenu>
    <ContextMenu Name="cm" Opened="OnOpened" Closed="OnClosed" StaysOpen="true">
      <MenuItem Header="File"/>
      <MenuItem Header="Save"/>
      <MenuItem Header="SaveAs"/>
      <MenuItem Header="Recent Files">
        <MenuItem Header="ReadMe.txt"/>
        <MenuItem Header="Schedule.xls"/>
      </MenuItem>
    </ContextMenu>
  </Button.ContextMenu>
</Button>
btn = new Button();
btn.Content = "Created with C#";
contextmenu = new ContextMenu();
btn.ContextMenu = contextmenu;
mi = new MenuItem();
mi.Header = "File";
mia = new MenuItem();
mia.Header = "New";
mi.Items.Add(mia);
mib = new MenuItem();
mib.Header = "Open";
mi.Items.Add(mib);
mib1 = new MenuItem();
mib1.Header = "Recently Opened";
mib.Items.Add(mib1);
mib1a = new MenuItem();
mib1a.Header = "Text.xaml";
mib1.Items.Add(mib1a);
contextmenu.Items.Add(mi);
cv2.Children.Add(btn);
Dim btn As New Button()
Dim contextmenu As New ContextMenu()
Dim mi As New MenuItem()
Dim mia As New MenuItem()

btn.Background = Brushes.Red
btn.Height = 30
btn.Content = "Created with Visual Basic."

mi.Header = ("Item 1")
contextmenu.Items.Add(mi)
mia.Header = ("Item 2")
contextmenu.Items.Add(mia)

btn.ContextMenu = (contextmenu)
cv2.Children.Add(btn)

Applicazione di stili a un ContextMenu

Usando un controllo Style, è possibile modificare notevolmente l'aspetto e il comportamento di un ContextMenu senza scrivere un controllo personalizzato. Oltre a impostare le proprietà visive, è anche possibile applicare stili a parti di un controllo. Ad esempio, è possibile modificare il comportamento delle parti del controllo usando le proprietà oppure aggiungere parti o modificare il layout di un ContextMenu. Gli esempi seguenti illustrano diversi modi per aggiungere stili ai controlli ContextMenu.

Il primo esempio definisce uno stile denominato SimpleSysResources, che mostra come usare le impostazioni di sistema correnti nello stile. L'esempio assegna MenuHighlightBrushKey come colore Background e MenuTextBrushKey come colore Foreground del ContextMenu.

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

Nell'esempio seguente viene utilizzato l'elemento Trigger per modificare l'aspetto di un Menu in risposta agli eventi generati nel ContextMenu. Quando un utente sposta il mouse sul menu, cambia l'aspetto degli elementi ContextMenu.

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

Vedere anche