在 WPF 中使用 WindowsFormHost 控件时,RoutedCommand 调用使​​用 KeyGesture 失败

RoutedCommand call fails using KeyGesture when using WindowsFormHost control in WPF

我有一个应用程序使用 cefSharp 和一些 KeyGestures 打开一些表格。我们最初使用 WPF ChromiumWebBrowser,但需要使用不支持的触摸滚动。结果,我们将控件更改为 WindowsFormHost 中的 WinForms ChromiumWebBrowser。

切换后,绑定到我们的 RoutedCommand 的 KeyGestures 不再触发。

在查看 here, here, and here 之后,我尝试了几种不同的解决方案,但都无济于事。

如上所述,当 window 被停用,然后被激活时,KeyGestures 被适当地路由(如关于断点 'causing' 命令工作的讨论)。

在将焦点转移到 window、将焦点转移到另一个 WPF 控件并聚焦 WindowsFormsHosts 之后,我尝试在计时器上使用 CommandManager.InvalidateRequerySuggested 方法或在加载时被调用。

我的命令声明如下:

            RoutedCommand ShowAdmin = new RoutedCommand();
            ShowAdmin.InputGestures.Add(new KeyGesture(Key.F1, ModifierKeys.Shift | ModifierKeys.Alt | ModifierKeys.Control));
            CommandBindings.Add(new CommandBinding(ShowAdmin, ShowAdminForm));

我基本上有两个问题:

1) 为什么我没有收到命令。是因为 WinForms 控件没有 'bubble' 按键事件吗?

2) 如果不打开另一个 window,我能做些什么来捕获按键手势,只需要再次关闭它

提前感谢您的提问、评论和回答!

如果您实施 IKeyboardHandler,您应该可以处理自定义按键组合,这可能是最简单、最干净的解决方案。

https://github.com/cefsharp/CefSharp/blob/master/CefSharp/IKeyboardHandler.cs