ContextMenu
类表示使用特定于上下文的
Menu
来公开功能的元素。 通常,用户通过单击鼠标右键在用户界面 (UI) 中公开
ContextMenu
。 本主题介绍
ContextMenu
元素,并提供有关如何在 Extensible Application Markup Language (XAML) 和代码中使用它的示例。
ContextMenu
会附加到特定控件。 通过使用
ContextMenu
元素,可以向用户呈现一个项列表,这些项指定与特定控件(例如
Button
)相关联的命令或选项。 用户通过右键单击控件来显示菜单。 通常,单击
MenuItem
即可打开子菜单或导致应用程序执行某个命令。
下面的示例展示了如何创建具有子菜单的
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)
通过使用控件 Style,无需编写自定义控件即可显著改变 ContextMenu 的外观和行为。 除了设置可视化属性以外,还可以将样式应用于控件的各个部分。 例如,可以使用属性来更改控件各个部件的行为,也可以向 ContextMenu 添加部件或更改其布局。 以下示例展示了向 ContextMenu 控件添加样式的几种方法。
第一个示例定义一个名为 SimpleSysResources
的样式,它演示如何在样式中使用当前的系统设置。 此示例将 MenuHighlightBrushKey 分配为 ContextMenu 的 Background 颜色并将 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>
ContextMenu
Style
MenuItem
ContextMenu
ContextMenu 样式和模板
WPF 控件库示例