我正在开发 MVVM 应用程序,我想为我的应用程序创建全局快捷方式。有必要在模块之间导航应用程序。我有带有代码的主窗口:
<UserControl.InputBindings>
<KeyBinding Command="{Binding ChangeModuleComand}"
Key="M"
Modifiers="Control"/>
</UserControl.InputBindings>
当我将焦点放在窗口上时,它会起作用,
但是当我将注意力集中在该 UserControl 中的 TextBox 上时出现问题(命令未触发)。
是否可以在整个应用程序中不进行大量修改的情况下捕获关键压力?
A.
最佳答案
听起来你的事件在它冒泡之前就已经被处理了。接下来我想知道您是否可以将输入绑定(bind)移动到窗口而不是用户控件。我的最终选择是删除输入绑定(bind)并创建全局 checkin 代码。
由于您已经在使用输入绑定(bind),因此我添加了以下代码选项:
//In App.xaml.cs
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
EventManager.RegisterClassHandler(typeof(UIElement), UIElement.KeyDownEvent, new RoutedEventHandler(GlobalClick));
}
private void GlobalClick(object sender, RoutedEventArgs e)
{
var args = (KeyEventArgs) e;
if (args.KeyboardDevice.IsKeyDown(Key.M) &&
args.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || args.KeyboardDevice.IsKeyDown(Key.RightCtrl))
MessageBox.Show("Works");
}
关于整个窗口中的 WPF 快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17660523/