将 ICommand 绑定到 MenuItem 并分配 ShortCut
Binding an ICommand to a MenuItem and assign a ShortCut
我有以下场景:
具有多个 ICommand (RelayCommand) 属性的 ViewModel。这些属性绑定到视图中的菜单项。一些菜单项应该有一个键盘快捷键。为此,我尝试使用 window 的 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>
InputGestureText
属性 仅用于设置文本, 描述 将调用与命令关联的命令的输入手势。
它不会以某种方式将输入手势与菜单项相关联;它只是将文本添加到菜单项。这记录在 MSDN 上:https://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem.inputgesturetext(v=vs.110).aspx.
所以不,没有更好的方法来做你正在做的事情:)
可能我来晚了一点,但是:
菜单项上的自动快捷方式提示适用于 RoutedCommand
。
public static readonly RoutedUICommand NewProject = new RoutedUICommand() { InputGestures = { new KeyGesture(Key.N, ModifierKeys.Control) } };
如果你这样做 - 你将使你的热键工作(即使在 window 中没有输入绑定)并且你会在绑定到此命令的任何菜单项中看到此热键。这仅适用于 RoutedCommand
(类型在 WPF 源代码中是硬编码的)。如果您的命令不是 RoutedCommand
(而且它不是,因为您使用 ICommand
模式)- 您 必须 自己设置手势提示。
因此有两种选择:使用 RoutedCommand
和它们的事件处理程序(在 UI 代码中!)或实现您自己的命令并使用快捷方式提示做任何您能做的事情。
我有以下场景:
具有多个 ICommand (RelayCommand) 属性的 ViewModel。这些属性绑定到视图中的菜单项。一些菜单项应该有一个键盘快捷键。为此,我尝试使用 window 的 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>
InputGestureText
属性 仅用于设置文本, 描述 将调用与命令关联的命令的输入手势。
它不会以某种方式将输入手势与菜单项相关联;它只是将文本添加到菜单项。这记录在 MSDN 上:https://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem.inputgesturetext(v=vs.110).aspx.
所以不,没有更好的方法来做你正在做的事情:)
可能我来晚了一点,但是:
菜单项上的自动快捷方式提示适用于 RoutedCommand
。
public static readonly RoutedUICommand NewProject = new RoutedUICommand() { InputGestures = { new KeyGesture(Key.N, ModifierKeys.Control) } };
如果你这样做 - 你将使你的热键工作(即使在 window 中没有输入绑定)并且你会在绑定到此命令的任何菜单项中看到此热键。这仅适用于 RoutedCommand
(类型在 WPF 源代码中是硬编码的)。如果您的命令不是 RoutedCommand
(而且它不是,因为您使用 ICommand
模式)- 您 必须 自己设置手势提示。
因此有两种选择:使用 RoutedCommand
和它们的事件处理程序(在 UI 代码中!)或实现您自己的命令并使用快捷方式提示做任何您能做的事情。