Общие сведения об элементе ContextMenu

Класс ContextMenu представляет элемент, предоставляющий функциональность с использованием контекстуального Menu. Как правило, пользователь предоставляет ContextMenu в пользовательском интерфейсе, нажимая правую кнопку мыши. В этом разделе представлены сведения об элементе ContextMenu и приводятся примеры его использования в языке XAML и коде.

Элемент управления ContextMenu

ContextMenu подключается к определенному элементу управления. Элемент ContextMenu позволяет представлять пользователям список элементов, определяющих команды или параметры, которые связаны с определенным элементом управления, например Button. Пользователи нажимают правой кнопкой мыши элемент управления, чтобы появилось меню. Как правило, при нажатии на элемент MenuItem открывается вложенное меню или вызывается приложение для выполнения команды.

Создание элементов ContextMenu

В следующих примерах показано, как создать ContextMenu подменю. Элементы управления ContextMenu подключаются к элементам управления «кнопка».

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

Применение стилей к ContextMenu

С помощью элемента управления Style можно значительно менять внешний вид и поведение ContextMenu, не создавая пользовательский элемент управления. В дополнение к установке визуальных свойств также можно применить стили к частям элемента управления. Например, можно изменить поведение частей элемента управления, используя свойства, либо добавлять части или изменить макет ContextMenu. В следующих примерах показано несколько способов добавления стилей в элементы управления ContextMenu.

В первом примере определяется стиль с именем SimpleSysResources, который показывает, как использовать текущие параметры системы в стиле. В этом примере MenuHighlightBrushKey назначается как цвет Background, а MenuTextBrushKey — как цвет Foreground элемента 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>  

В следующем примере элемент Trigger используется для изменения внешнего вида Menu в ответ на события, вызываемые в ContextMenu. Когда пользователь перемещает мышь поверх меню, внешний вид элементов 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>  

См. также