如何为 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 中的工具栏按钮创建热键?的主要内容,如果未能解决你的问题,请参考以下文章