WPF - Menu 菜单控件
Menu 菜单是一个控件,使您能够分层组织与命令和事件处理程序关联的元素。 Menu 是一个 ItemsControl,因此它可以包含任何对象类型的集合,例如字符串、图像或面板。 Menu类的层次继承如下 −
以下是 Menu 类的常用属性
序号 | 属性和描述 |
---|---|
1 | Background 获取或设置描述控件背景的画笔。 (继承自Control。) |
2 | BindingGroup 获取或设置用于元素的 BindingGroup。 (继承自FrameworkElement。) |
3 | BitmapEffect 已过时。 获取或设置直接应用于此元素的渲染内容的位图效果。 这是一个依赖属性。 (继承自UIElement。) |
4 | BorderThickness 获取或设置控件的边框粗细。 (继承自Control。) |
5 | ContextMenu 获取或设置每当通过用户界面 (UI) 从此元素内请求上下文菜单时应显示的上下文菜单元素。 (继承自 FrameworkElement。) |
6 | Effect 获取或设置要应用于 UIElement 的位图效果。 这是一个依赖属性。 (继承自UIElement。) |
7 | Height 获取或设置元素的建议高度。 (继承自FrameworkElement。) |
8 | IsMainMenu 获取或设置一个值,该值指示此菜单是否收到主菜单激活通知。 |
9 | Items 获取用于生成 ItemsControl 内容的集合。 (继承自 ItemsControl。) |
10 | ItemsPanel 获取或设置定义控制项目布局的面板的模板。 (继承自 ItemsControl。) |
11 | ItemsSource 获取或设置用于生成 ItemsControl 内容的集合。 (继承自 ItemsControl。) |
12 | ItemStringFormat 获取或设置一个复合字符串,该字符串指定如何格式化 ItemsControl 中的项目(如果这些项目显示为字符串)。 (继承自 ItemsControl。) |
13 | ItemTemplate 获取或设置用于显示每个项目的 DataTemplate。 (继承自 ItemsControl。) |
14 | ToolTip 获取或设置在用户界面 (UI) 中为此元素显示的工具提示对象。 (继承自FrameworkElement。) |
15 | VerticalContentAlignment 获取或设置控件内容的垂直对齐方式。 (继承自Control。) |
16 | Width 获取或设置元素的宽度。 (继承自 FrameworkElement。) |
菜单类常用事件
序号 | 事件和描述 |
---|---|
1 | ContextMenuClosing 在元素上的任何上下文菜单关闭之前发生。 (继承自FrameworkElement。) |
2 | ContextMenuOpening 打开元素上的任何上下文菜单时发生。 (继承自FrameworkElement。) |
3 | KeyDown 当焦点位于该元素上时按下按键时发生。 (继承自UIElement。) |
4 | KeyUP 当焦点位于该元素上且释放键时发生。 (继承自UIElement。) |
5 | ToolTipClosing 在元素上的任何工具提示关闭之前发生。 (继承自 FrameworkElement。) |
6 | ToolTipOpening 打开元素上的任何工具提示时发生。 (继承自FrameworkElement。) |
7 | TouchDown 当手指悬停在该元素上并触摸屏幕时发生。 (继承自UIElement。) |
8 | TouchEnter 当触摸从该元素的边界外部移动到内部时发生。 (继承自UIElement。) |
9 | TouchLeave 当触摸从该元素的边界内部移动到外部时发生。 (继承自UIElement。) |
10 | TouchMove 当手指在屏幕上移动且手指位于该元素上方时发生。 (继承自 UIElement。) |
11 | TouchUp 当手指悬停在该元素上且手指离开屏幕时发生。 (继承自 UIElement。) |
示例
让我们创建一个名为 WPFMenuControl 的新 WPF 项目。
将菜单控件从工具箱拖到设计窗口。
以下示例包含三个菜单选项和一些菜单项。 当用户单击某个项目时,程序会更新标题。 这是 XAML 代码 −
<Window x:Class = "WPFMenuControl.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local = "clr-namespace:WPFMenuControl" mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "604"> <Grid> <Menu HorizontalAlignment = "Left" VerticalAlignment = "Top" Width = "517"> <MenuItem Header = "File"> <MenuItem Header = "Item 1" HorizontalAlignment = "Left" Width = "140" Click = "MenuItem_Click" /> <MenuItem Header = "Item 2" HorizontalAlignment = "Left" Width = "140" Click = "MenuItem_Click" /> <Separator HorizontalAlignment = "Left" Width = "140" /> <MenuItem Header = "Item 3" HorizontalAlignment = "Left" Width = "140" Click = "MenuItem_Click"/> </MenuItem> <MenuItem Header = "Edit"> <MenuItem Header = "Item 1" HorizontalAlignment = "Left" Width = "140" Click = "MenuItem_Click1" /> <MenuItem Header = "Item 2" HorizontalAlignment = "Left" Width = "140" Click = "MenuItem_Click1" /> <Separator HorizontalAlignment = "Left" Width = "140" /> <MenuItem Header = "Item 3" HorizontalAlignment = "Left" Width = "140" Click = "MenuItem_Click1" /> </MenuItem> <MenuItem Header = "View"> <MenuItem Header = "Item 1" HorizontalAlignment = "Left" Width = "140" Click = "MenuItem_Click2" /> <MenuItem Header = "Item 2" HorizontalAlignment = "Left" Width = "140" Click = "MenuItem_Click2" /> <Separator HorizontalAlignment = "Left" Width = "140" /> <MenuItem Header = "Item 3" HorizontalAlignment = "Left" Width = "140" Click = "MenuItem_Click2"/> </MenuItem> </Menu> </Grid> </Window>
这是事件在 C# 中的实现。
using System.Windows; using System.Windows.Controls; namespace WPFMenuControl { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void MenuItem_Click(object sender, RoutedEventArgs e) { MenuItem item = sender as MenuItem; this.Title = "File: " + item.Header; } private void MenuItem_Click1(object sender, RoutedEventArgs e) { MenuItem item = sender as MenuItem; this.Title = "Edit: " + item.Header; } private void MenuItem_Click2(object sender, RoutedEventArgs e) { MenuItem item = sender as MenuItem; this.Title = "View: " + item.Header; } } }
当你编译并执行上面的代码时,它将产生以下输出 −
我们建议您执行上面的示例代码并尝试 Menu 类的其他属性和事件。