将ICommand绑定到MenuItem并指定ShortCut

问题描述 投票:1回答:2

我有以下场景:

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

// 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>
c# wpf icommand
2个回答
2
投票

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

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

所以不,没有更好的办法做你正在做的事情:)


0
投票

可能是我有点晚了,但是:

菜单项上的自动快捷键提示与RoutedCommand一起使用。

public static readonly RoutedUICommand NewProject = new RoutedUICommand() { InputGestures = { new KeyGesture(Key.N, ModifierKeys.Control) } };

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

所以有两个选择:为它们使用RoutedCommand和事件处理程序(在UI代码中!)或实现自己的命令,并使用快捷方式提示做任何事情。

© www.soinside.com 2019 - 2024. All rights reserved.