Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中使用WindowsFormHost控件时,使用键手势调用RoutedCommand失败_C#_.net_Wpf_Winforms_Cefsharp - Fatal编程技术网

C# 在WPF中使用WindowsFormHost控件时,使用键手势调用RoutedCommand失败

C# 在WPF中使用WindowsFormHost控件时,使用键手势调用RoutedCommand失败,c#,.net,wpf,winforms,cefsharp,C#,.net,Wpf,Winforms,Cefsharp,我有一个应用程序使用cefSharp和一些按键手势来打开一些表单。我们最初使用的是WPF ChromiumWebBrowser,但需要使用触摸滚动,这是不受支持的。因此,我们将控件更改为WindowsFormHost中的WinForms ChromiumWebBrowser 切换后,绑定到路由命令的按键手势不再触发 在回顾和之后,我尝试了几种不同的解决方案,但都没有成功 如上所述,当窗口被停用,然后被激活时,按键手势将按照“导致”命令工作的断点的讨论进行适当的路由 在将焦点转移到窗口、将forc

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

切换后,绑定到路由命令的按键手势不再触发

在回顾和之后,我尝试了几种不同的解决方案,但都没有成功

如上所述,当窗口被停用,然后被激活时,按键手势将按照“导致”命令工作的断点的讨论进行适当的路由

在将焦点转移到窗口、将forcus转移到另一个WPF控件以及聚焦WindowsFormsHosts之后,我尝试在计时器上使用CommandManager.InvalidateRequestSuggested方法,或者在加载时被调用

我的命令声明如下:

            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控件中可能有一种支持触摸滚动的方法,这就是解释触摸、获取增量并将其发送给鼠标滚轮处理程序。