在 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
我有一个应用程序使用 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