Вызов RoutedCommand не выполняется с помощью KeyGesture при использовании элемента управления WindowsFormHost в WPF

У меня есть приложение, использующее cefSharp и некоторые KeyGestures для открытия некоторых форм. Первоначально мы использовали WPF ChromiumWebBrowser, но нам потребовалась сенсорная прокрутка, которая не поддерживается. В результате мы изменили элемент управления на WinForms ChromiumWebBrowser внутри WindowsFormHost.

После переключения KeyGestures, привязанные к нашим RoutedCommands, больше не срабатывают.

После просмотра здесь, здесь и здесь, я пробовал несколько разных решений, но безрезультатно.

Согласно вышеизложенному, когда окно деактивируется, затем активированные KeyGestures маршрутизируются соответствующим образом (как обсуждалось в отношении точек останова, «заставляющих» команды работать).

Я пробовал использовать метод CommandManager.InvalidateRequerySuggested на таймере или при вызове при загрузке, после переноса фокуса в окно, после переноса форкуса на другой элемент управления 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) Что я могу сделать, чтобы захватить жест клавиши, не открывая другое окно, только чтобы закрыть его снова

Заранее благодарим за вопросы, комментарии и ответы!


person chaosaffe    schedule 06.04.2015    source источник


Ответы (1)


Если вы реализуете IKeyboardHandler, вы должны обрабатывать пользовательские комбинации нажатия клавиш, это, вероятно, ваше самое простое и чистое решение.

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

person amaitland    schedule 07.04.2015
comment
Хотя обходной путь действительно решил указанную проблему, он по-прежнему не отвечает на вопросы OP и, в частности, не касается каких-либо сенсорных жестов. - person chaosaffe; 25.04.2015
comment
Это может быть пара вещей, и я не могу дать точного ответа, не вдаваясь в подробности. У запуска WinForms элемента управления в WPF есть много недостатков, см. blogs.msdn.com/b/scoberry/archive/2006/09/01/735844.aspx только для некоторых из них. - person amaitland; 25.04.2015
comment
Также вы явно не задавали никаких вопросов о сенсорных жестах, вы просто сказали, что они вам нужны, и переключились на элемент управления WinForms. - person amaitland; 25.04.2015
comment
Это честно. И проблемы распространены. Единственная причина использования элемента управления WinForm - отсутствие сенсорной прокрутки с элементом управления WPF ... - person chaosaffe; 25.04.2015
comment
Вероятно, есть способ поддержки сенсорной прокрутки в элементе управления WPF, это вопрос интерпретации касания, получения дельты и отправки ее обработчику колесика мыши. github.com/cefsharp/CefSharp/blob/master/ CefSharp.Wpf / - person amaitland; 25.04.2015
comment
Возможно, можно перевести что-то вроде matthamilton.net/touchscrolling-for-scrollviewer. Просто идея, не знаю, практично ли. - person amaitland; 25.04.2015
comment
На самом деле blogs.msdn.com/b /llobo/archive/2009/12/07/wpf-touch-basics.aspx было бы еще лучше. - person amaitland; 25.04.2015
comment
Вау ... Я не понимаю, почему это еще не реализовано во фреймворке CefSharp! Большое спасибо за ваш вклад asd solutions. Как обычно, я над этим сильно подумал :) - person chaosaffe; 25.04.2015
comment
Я создал github.com/cefsharp/CefSharp/issues/975 в качестве заполнителя . Пожертвования приветствуются :) - person amaitland; 26.04.2015