在WPF中使用快捷方式创建菜单的正确方法

时间:2010-06-08 04:16:04

标签: wpf menu keyboard-shortcuts

使用热键快捷键创建菜单的正确/最佳方法是什么?

我只想要一个像Visual Studio这样的文件菜单,包括新建,打开,保存,全部保存,退出以及其他一些标准快捷方式。

似乎InputGestureText显示了相应的文本,但由于它被称为“文本”并且似乎没有触发事件,我将假设这不是正确的方法。 Command体系结构看起来也相当笨重,所以如果有更好的方法,我不想走这条路。

更新: 为清楚起见,假设我使用以下菜单:

<Menu>
  <MenuItem Header="_File">
    <MenuItem Header="_New" />
    <MenuItem Header="_Open" />
    <Separator />
    <MenuItem Header="_Save" />
    <MenuItem Header="Save _All" />
    <Separator />
    <MenuItem Header="_Export"/>
    <MenuItem Header="_Import"/>
    <Separator />
    <MenuItem Header="E_xit"/>
  </MenuItem>
</Menu>

导出和导入是自定义快捷方式;微软没有像ApplicationCommands那样构建的东西。您能否提供完整的解决方案,包括必要的C#自定义代码? (它不仅会帮助我,而且我希望帮助其他寻找类似问题的人。)

2 个答案:

答案 0 :(得分:13)

您注意到InputGestureText实际上没有设置快捷方式,它只是在菜单上标记它是正确的。正确的方法是使用窗口的InputBindings。您可以将键盘快捷键映射到任何命令,包括您自己的模型定义的命令。但为了使其工作,您需要使用绑定到命令的菜单项 - 不直接处理它们的单击事件。这是在WPF中处理菜单命令的推荐方法。否则,您将需要采用旧式键盘事件处理。

<Window.InputBindings>
  <KeyBinding Key="A" Modifiers="Control" Command="{Binding MyAwesomeCommand}" />
</Window.InputBindings>
MSDN上的

More information

答案 1 :(得分:4)

看一下ApplicationCommands课程。您可以免费获得标准的关键手势(加速器)和文本。

<MenuItem Command="ApplicationCommands.Paste" Width="75" />