在大部分Windows应用程序中,通常我们的菜单(Menu)会至于窗口顶部,但是在WPF中为了保证较高的灵活性,实际上你可以在窗体的任意位置放置菜单控件(Menu Control),菜单控件(Menu Control)的高度和宽度也可以任由你的设定。
<Window x:Class="菜单.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:菜单" mc:Ignorable="d" Title="MainWindow" Height="200" Width="200"> <DockPanel> <Menu DockPanel.Dock="Top"> <MenuItem Header="_File"> <MenuItem Header="_New" /> <MenuItem Header="_Open" /> <MenuItem Header="_Save" /> <Separator /> <MenuItem Header="_Exit" /> </MenuItem> </Menu> <TextBox AcceptsReturn="True" Name="txtEditor" /> </DockPanel> </Window>一个标签的第一个字符前有一个下划线(_)。在WPF的Meun控件中,这样的命名规则意味着窗体将会接收到相应的快捷键用于激活Meun中的子条目。这将会以从顶层依次向下展开层次的子项目的方式工作,在该例程中,如果按下Alt键的同时,依次按下F键,然后按下N键,那么标签名为New的子条目将会被选中激活。
最简单的方法是向MenuItem添加一个click事件处理程序,就像这样:
<MenuItem Header="_New" Click="mnuNew_Click" />但更常见的方法是使用WPF命令。在使用命令时,WPF会自动响应键盘快捷键。 菜单项的文本(Header)也会自动设置
<Window x:Class="菜单.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:菜单" mc:Ignorable="d" Title="MainWindow" Height="200" Width="200"> <Window.CommandBindings> <CommandBinding Command="New" CanExecute="CommonCommandBinding_CanExecute" /> <CommandBinding Command="Open" CanExecute="CommonCommandBinding_CanExecute" /> <CommandBinding Command="Save" CanExecute="CommonCommandBinding_CanExecute" /> </Window.CommandBindings> <DockPanel> <Menu DockPanel.Dock="Top"> <MenuItem Header="_File"> <MenuItem Command="New" /> <Separator /> <MenuItem Header="_Exit" /> </MenuItem> <MenuItem Header="_Edit"> <MenuItem Command="Cut" /> <MenuItem Command="Copy" /> <MenuItem Command="Paste" /> <MenuItem Command="Open" /> <MenuItem Command="Save" /> <MenuItem Command="Find" /> </MenuItem> </Menu> <TextBox AcceptsReturn="True" Name="txtEditor" /> </DockPanel> </Window> using System.Windows; using System.Windows.Input; namespace 菜单 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void CommonCommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e) { e.CanExecute = true; } } }这个示例告诉4个道理: ① wpf内置命令可以简写,如new,cut,save ② 简单的事件处理CanExecute,在绑定时可以共用一个 ③wpf内置命令中的paste,cut,copy,完全不需要指明绑定到textbox,它能自动实现,而new,save,open等命令必须由用户自己实现逻辑。 ④用内置命令和菜单menu结合,就算没有实现逻辑,起码也响应了键盘快捷键, 菜单项的文本(Header)也会根据命令描述自动设置。