应用程序命令在菜单标题中的名称

时间:2013-05-10 12:21:54

标签: c# .net wpf vb.net

使用ApplicationCommands类时,我可以免费获得很多东西。文字,快捷方式和本地化。然而,似乎(或者我还没有找到)指定由_符号指定的字符的方法(例如E_xit)。有没有办法为

指定该字符
ApplicationCommands.New ? 

或者是使用

的唯一解决方案
CustomRountedUICommand 

我可以简单地为name属性指定_New吗?

编辑:

在此澄清我的xaml文件的提取:

<MenuItem Name="NewProject" Command="{Binding MenuNewProject}" />

MenuNewProject是一个添加了InputGesture的ApplicationCommand.New。但是如何在不设置菜单标题的情况下添加下划线(已经通过命令绑定完成)?

EDIT2:

正如已经指出的那样,这显然是一个菜单问题。现在的问题是:在文本中是否有替代指定加速键的?我在MenuItem类中找不到任何内容。

最终解决方案:

使用:

AccessKeyManager.Register('N',MenuItem)

但松散显示带下划线的N或设置

MenuItem.Header ='_New'

手动并松散本地化。不幸的是,解析ApplicationCommands.New.Name总是返回英文名称。 ContentPresenter类可能有一个解决方案,但这对我的小项目来说有点过分了。

2 个答案:

答案 0 :(得分:1)

标题文字中使用下划线_创建热键或使用输入绑定创建快捷方式(from this answer):

<Window.CommandBindings>
        <CommandBinding Command="New" Executed="CommandBinding_Executed" />
</Window.CommandBindings>
<Window.InputBindings>
        <KeyBinding Key="N" Modifiers="Control" Command="New"/>
</Window.InputBindings>

答案 1 :(得分:1)

RoutedUICommand没有指定加速键或快捷键,因为它们可能放在多个位置,可能使用不同的参数(使它们实际上是不同的命令)。因此,应用加速器的责任在承载命令的Menu上。你需要自己分配这些。

<MenuItem Header="_New"
          Command="ApplicationCommands.New" />

使用InputBinding in the XAML or in Code Behind指定的快捷键。

<Window.InputBindings>
  <KeyBinding Key="N"
              Modifiers="Control" 
              Command="ApplicationCommands.New" />
</Window.InputBindings>

快捷键应自动显示在菜单中。