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

时间:2015-04-06 16:23:30

标签: c# .net wpf winforms cefsharp

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

切换后,绑定到RoutedCommands的KeyGestures不再触发。

在审核了hereherehere后,我尝试了几种不同的解决方案,但无济于事。

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

我已经尝试在定时器上使用CommandManager.InvalidateRequerySuggested方法,或者在将焦点转移到窗口后,在将forcus转移到另一个WPF控件之后以及在关注WindowsFormsHosts之后被加载时调用。

我的命令声明如下:

            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控件不会“冒泡”按键事件吗?

2)如果不打开另一个窗口,只能再次关闭它,我该怎么做才能捕获keygesture

提前感谢您的问题,意见和解答!

1 个答案:

答案 0 :(得分:0)

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

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