如何为 WPF 中的工具栏按钮创建热键?

Posted

技术标签:

【中文标题】如何为 WPF 中的工具栏按钮创建热键?【英文标题】:How do you create hotkeys for toolbar buttons in 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”的按钮,并且没有与之关联的热键。

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

【问题讨论】:

看看这里的第一个答案:***.com/questions/1361350/keyboard-shortcuts-in-wpf 【参考方案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。

【讨论】:

以上是关于如何为 WPF 中的工具栏按钮创建热键?的主要内容,如果未能解决你的问题,请参考以下文章

如何为带有确定/取消按钮的数据绑定 WPF 对话框设计支持数据类型?

如何为 iOS 应用创建自定义容器视图?

如何为 UIbuttons 提供约束

WPF中的自定义热键

如何为 UIToolbar 上的按钮添加滚动?

如何为模型制作放置工具?