ContextMenu 概述

ContextMenu 类表示使用特定于上下文的 Menu 来公开功能的元素。 通常,用户通过单击鼠标右键在用户界面 (UI) 中公开 ContextMenu。 本主题介绍 ContextMenu 元素,并提供有关如何在 Extensible Application Markup Language (XAML) 和代码中使用它的示例。

ContextMenu 控件

ContextMenu 会附加到特定控件。 通过使用 ContextMenu 元素,可以向用户呈现一个项列表,这些项指定与特定控件(例如 Button)相关联的命令或选项。 用户通过右键单击控件来显示菜单。 通常,单击 MenuItem 即可打开子菜单或导致应用程序执行某个命令。

创建 ContextMenus

下面的示例展示了如何创建具有子菜单的 ContextMenuContextMenu 控件会附加到按钮控件。

<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 分配为 ContextMenuBackground 颜色并将 MenuTextBrushKey 分配为 Foreground 颜色。

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

另请参阅