首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ICommand绑定到MenuItem并分配ShortCut

将ICommand绑定到MenuItem并分配ShortCut
EN

Stack Overflow用户
提问于 2017-08-17 09:03:19
回答 2查看 457关注 0票数 1

我有以下情况:

具有多个ViewModel ( ICommand (RelayCommand)属性)的RelayCommand。这些属性绑定到视图中的菜单项。一些菜单项目应该有一个键盘快捷方式。为此,我尝试使用窗口的InputBindings。这是可行的,但我必须手动将InputGestureText分配给MenuItem。所以我想有更好的方法将ICommand绑定到MenuItem并指定一个快捷方式.

代码语言:javascript
复制
// ViewModel
class MyViewModel: ViewModelBase {
    public ICommand TestCommand {get; set;}
}

// View
<Window...>

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

    // ...
    <MenuItem Name="MenuItemTest" Command="{Binding TestCommand}"
              Header="Test" InputGestureText="Ctrl + R" />

</Window>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-17 09:35:40

InputGestureText属性仅用于设置一个文本,该文本描述将调用与命令关联的命令的输入手势。

它不以某种方式将输入手势与菜单项相关联;它只是向菜单项添加文本。这在MSDN:https://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem.inputgesturetext(v=vs.110).aspx上有记录。

因此,没有比这更好的方法来做你正在做的事情:)

票数 2
EN

Stack Overflow用户

发布于 2019-03-19 14:44:35

也许我来晚了一点,但是:

对菜单项的自动快捷提示与RoutedCommand一起工作。

代码语言:javascript
复制
public static readonly RoutedUICommand NewProject = new RoutedUICommand() { InputGestures = { new KeyGesture(Key.N, ModifierKeys.Control) } };

如果您这样做-您将使您的热键工作(即使没有输入绑定在窗口),您将看到这个热键在任何菜单项绑定到此命令。这只适用于RoutedCommand (类型在WPF源代码中是硬编码的)。如果您的命令不是RoutedCommand (而且它不是,因为您使用ICommand模式),那么您必须自己设置手势提示。

因此有两个选项:为它们使用RoutedCommand和事件处理程序(在UI代码中!)或者实现您自己的命令,并尽您所能地使用快捷提示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45730812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档