ContextMenu 概述

更新:2007 年 11 月

ContextMenu 类表示使用特定于上下文的 Menu 公开功能的元素。通常,用户可以通过单击鼠标右键在用户界面 (UI) 中公开 ContextMenu。本主题介绍 ContextMenu 元素,并提供有关如何在可扩展应用程序标记语言 (XAML) 和代码中使用该元素的示例。

本主题包括下列各节。

  • ContextMenu 控件
  • 创建 ContextMenu
  • 对 ContextMenu 应用样式
  • 相关主题

ContextMenu 控件

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

创建 ContextMenu

下面的示例演示如何创建包含子菜单的 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>
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)
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);

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

请参见

任务

WPF 控件库示例

概念

ContextMenu ControlTemplate 示例

参考

ContextMenu

Style

Menu

MenuItem

其他资源

ContextMenu