【问题标题】:Binding an ICommand to a MenuItem and assign a ShortCut将 ICommand 绑定到 MenuItem 并分配 ShortCut
【发布时间】:2017-08-17 09:03:19
【问题描述】:

我有以下场景:

具有多个 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


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是我想回到 WinForms 的时刻之一:/
    • 为什么?由于在 WinForms 中为 MenuItem 分配快捷方式会显示分配的快捷方式 - 我不必分配文本 :) 关于缺失的投票:请不要误会我的意思,您回答了我的问题,我接受了您的回答。但是您刚刚确认我做得对,并且没有其他方法,因此您没有为我的问题提供“解决方案”。但我会投票给你的答案...
    【解决方案2】:

    可能我来晚了,但是:

    菜单项上的自动快捷方式提示适用于RoutedCommand

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 2013-08-05
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      相关资源
      最近更新 更多