【问题标题】:How do you create hotkeys for toolbar buttons in WPF?如何为 WPF 中的工具栏按钮创建热键?
【发布时间】:2012-07-11 01:48:51
【问题描述】:

在 WPF 中,您可以按如下方式制作按钮:

<Button Name="Foo" Content="_Foo" />

“F”前的下划线将F 键与Foo 按钮相关联(并在“Foo”中的“F”下方添加下划线)。

但是,在工具栏中:

<ToolBar>
    <Button Name="Foo" Content="_Foo" />
</ToolBar>

这只是创建了一个带有文本“_Foo”的按钮,并且没有与之关联的热键。

是否有任何内置方法可以为工具栏按钮创建热键?

【问题讨论】:

标签: .net wpf button hotkeys


【解决方案1】:

Button 的 ToolBar 样式会关闭正常行为,但您可以通过将 AccessText 显式指定为 Button 的内容来强制其恢复:

<ToolBar>
    <Button Name="Foo">
        <AccessText>_Foo</AccessText>
    </Button>
</ToolBar>

【讨论】:

    【解决方案2】:

    在包含工具栏的窗口上使用InputBindings。具体来说,您将像这样创建一些KeyBindings

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

    它需要使用到 ICommand 的绑定(你 正在使用 MVVM 对吗?)并通过将它放在 Window 上来确保快捷方式是“全局的”,否则你必须担心什么有键盘焦点。在您的工具栏中,您通常会通过 Tooltip 指示快捷方式:

    <ToolBar>
        <Button ToolTip="Save (Ctrl+S)" Command="{Binding SaveCommand}">
    </ToolBar>
    

    【讨论】:

    • 我正在寻找一种创建热键而不是键绑定的方法。
    • 也许您应该扩展您的问题以准确说明“热键”的含义?
    • 如果您想知道热键是什么,请打开一些基本的 Windows 程序(计算器就是一个很好的例子)。然后按 ALT。您会注意到焦点切换到菜单栏,并且每个菜单项中的一个字母带有下划线。按下带下划线的字符会直接跳转到该菜单元素。如果你打开一个菜单,你会注意到那里的元素也有带下划线的字母。这些带下划线的字母被称为热键,而不是键盘快捷键。您可能会注意到某些菜单项还绑定了键盘快捷键。
    【解决方案3】:

    您似乎试图让工具栏控件做它不应该做的事情 - 它的 Focusable 属性设置为 False 因此不接收键盘输入,因此不会通过键盘激活任何按钮。 您希望通过菜单项、工具栏按钮或键盘进行操作 - 如前所述,选择 Commands 和 InputBindings。

    【讨论】:

      猜你喜欢
      • 2018-08-04
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 2014-11-03
      • 1970-01-01
      • 2019-02-25
      • 2015-09-22
      相关资源
      最近更新 更多