【问题标题】:Applicationcommands Name in Menu Header菜单标题中的应用程序命令名称
【发布时间】:2013-05-10 12:21:53
【问题描述】:

使用 ApplicationCommands 类时,我可以免费获得很多东西。文本、快捷方式和本地化。但是似乎有(或者我还没有找到)一种方法来指定您将通过 _ 表示法指定的字符(例如 E_xit)。有没有办法指定该字符,例如

ApplicationCommands.New ? 

或者是使用

的唯一解决方案
CustomRountedUICommand 

我可以在哪里简单地为 name 属性指定 _New?

编辑:

在这里澄清我的 xaml 文件的提取:

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

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

编辑2:

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

最终解决方案:

任意使用:

AccessKeyManager.Register('N',MenuItem)

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

MenuItem.Header ='_New'

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

【问题讨论】:

标签: c# .net wpf vb.net


【解决方案1】:

标题文本中使用下划线_ 创建热键或使用 InputBinding 创建快捷方式 (from this answer):

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

【讨论】:

  • 当我将命令绑定与 ApplicationCommands.New 一起使用时,会自动设置标题文本。这里的问题是如何在该文本中添加下划线,因为 name 属性是只读的。
  • 仍然可以设置MenuItem的Header。或者您可以创建自己的命令。据我所知,您无法更改标准的 ApplicationCommands。
  • 我想我只剩下设置标题的解决方案了。我目前的解决方案是解析应用程序的名称命令添加我的下划线,然后设置标题。
  • 如果您以后想使用本地化,请不要这样做
  • 是的,我知道,但我必须选择:放弃用户提示或必须自己管理本地化。您知道如何检索命令的本地化名称吗?
【解决方案2】:

RoutedUICommand's 不指定加速键或快捷键,因为它们可能被放置在多个位置,可能具有不同的参数(使它们生效不同的命令)。因此,应用加速器的责任在于托管命令的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>

快捷键应该会自动显示在您的菜单中。

【讨论】:

  • 有些 ApplicationCommands 有快捷方式,有些则没有。但是都缺少像 _File 这样的 _ 快捷方式,所以我可以使用 Alt、F、N 访问像 New 这样的菜单项。我不是指 Ctrl-N。
  • @JohannesFrank:这些是加速键,正如我所说,你必须自己设置。
  • 好的,我明白了,这与命令无关。我研究了 MenuItem 类,但找不到像加速键属性这样的东西。除了下划线还有其他方法吗?
  • @JohannesFrank:我不知道。您仍然需要下划线和RecognizesAccessKey="True"(在ContentControl 上)或&lt;AccessText&gt;_New&lt;/AccessText&gt; 实体。
  • 您的提示和谷歌将我引导至 AccessManager,我可以在其中注册密钥。但是,这有效并没有显示在文本中(没有下划线)。我投票支持你的提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 2012-08-23
  • 2016-01-17
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 2012-01-02
相关资源
最近更新 更多