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

Mat*_*rey 3 wpf keyboard-shortcuts menu

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

我只想要一个像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>
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*osh 13

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

<Window.InputBindings>
  <KeyBinding Key="A" Modifiers="Control" Command="{Binding MyAwesomeCommand}" />
</Window.InputBindings>
Run Code Online (Sandbox Code Playgroud)

有关 MSDN的更多信息.