C# 在WPF中使用WindowsFormHost控件时,使用键手势调用RoutedCommand失败
我有一个应用程序使用cefSharp和一些按键手势来打开一些表单。我们最初使用的是WPF ChromiumWebBrowser,但需要使用触摸滚动,这是不受支持的。因此,我们将控件更改为WindowsFormHost中的WinForms ChromiumWebBrowser 切换后,绑定到路由命令的按键手势不再触发 在回顾和之后,我尝试了几种不同的解决方案,但都没有成功 如上所述,当窗口被停用,然后被激活时,按键手势将按照“导致”命令工作的断点的讨论进行适当的路由 在将焦点转移到窗口、将forcus转移到另一个WPF控件以及聚焦WindowsFormsHosts之后,我尝试在计时器上使用CommandManager.InvalidateRequestSuggested方法,或者在加载时被调用 我的命令声明如下:C# 在WPF中使用WindowsFormHost控件时,使用键手势调用RoutedCommand失败,c#,.net,wpf,winforms,cefsharp,C#,.net,Wpf,Winforms,Cefsharp,我有一个应用程序使用cefSharp和一些按键手势来打开一些表单。我们最初使用的是WPF ChromiumWebBrowser,但需要使用触摸滚动,这是不受支持的。因此,我们将控件更改为WindowsFormHost中的WinForms ChromiumWebBrowser 切换后,绑定到路由命令的按键手势不再触发 在回顾和之后,我尝试了几种不同的解决方案,但都没有成功 如上所述,当窗口被停用,然后被激活时,按键手势将按照“导致”命令工作的断点的讨论进行适当的路由 在将焦点转移到窗口、将forc
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在不打开另一个窗口,只需再次关闭它的情况下,如何捕获按键手势
提前感谢您的提问、评论和回答 如果您实现IKeyboardHandler,您应该能够处理自定义按键组合,这可能是您最简单、最干净的解决方案
虽然解决方案确实解决了指定的问题,但它仍然没有解决OP的问题,并且特别没有处理任何触摸手势。这可能是几件事,如果不进一步研究,我无法提供准确的答案。在WPF中运行WinForms控件有很多缺点,请参阅其中的一些。此外,您没有明确询问任何有关触摸手势的问题,您只是说需要它,然后切换到WinForms控件。这是公平的。这些问题很普遍。使用WinForm控件的唯一原因是WPF控件缺少触摸滚动…WPF控件中可能有一种支持触摸滚动的方法,这就是解释触摸、获取增量并将其发送给鼠标滚轮处理程序。