使用热键快捷键创建菜单的正确/最佳方法是什么?
我只想要一个像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#自定义代码? (它不仅会帮助我,而且我希望帮助其他寻找类似问题的人。)
答案 0 :(得分:13)
您注意到InputGestureText实际上没有设置快捷方式,它只是在菜单上标记它是正确的。正确的方法是使用窗口的InputBindings。您可以将键盘快捷键映射到任何命令,包括您自己的模型定义的命令。但为了使其工作,您需要使用绑定到命令的菜单项 - 不直接处理它们的单击事件。这是在WPF中处理菜单命令的推荐方法。否则,您将需要采用旧式键盘事件处理。
<Window.InputBindings>
<KeyBinding Key="A" Modifiers="Control" Command="{Binding MyAwesomeCommand}" />
</Window.InputBindings>
MSDN上的
答案 1 :(得分:4)
看一下ApplicationCommands课程。您可以免费获得标准的关键手势(加速器)和文本。
<MenuItem Command="ApplicationCommands.Paste" Width="75" />