2010-06-08 51 views
3

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

我只是想要一个像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#定制代码? (不仅可以帮助我,但我希望能帮助其他任何正在寻找类似问题的人。)

回答

13

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

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

More information MSDN上。

+0

嗯,这是一种将自定义快捷方式连接到自定义命令的新方法。它并没有完全让我去,但与MSDN的链接是非常有帮助的。 – 2010-06-08 05:07:33

+0

InputBinding使用户能够通过键盘快捷键调用该命令。要在菜单中显示快捷方式,只需将InputGestureText属性添加到适当的菜单: ' mrfelis 2017-04-20 14:57:00

4

请看ApplicationCommands类。您可以免费获得标准键盘手势(加速器)和文本。

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

当我将其添加到我的应用程序时,即使用户专注于TextBox并且实际上可以进行复制和粘贴,菜单项也会被禁用。另外,自定义命令需要做什么? – 2010-06-08 04:29:46

+0

@matt右..每个命令是一个Execute + CanExecute组合。如果CanExecute的计算结果为false,菜单项将被禁用。即,如果还没有任何内容被复制,PasteCmd.CanExecute将返回false(灰色显示菜单项)。对于自定义命令 - 请参阅http://msdn.microsoft.com/en-us/library/system.windows.input.routedcommand.aspx – Gishu 2010-06-08 05:19:10

相关问题