Как в C# назначить горячую клавишу методу в кастомной форме, используя KeyBindings и InputBindings?
У нас реализована кастомная платформа на C#, называемая Торнадо. В этой платформе применяются не обычные формы WinForms, а кастомные. Описание формы содержится в ZML-файле и представляет собой XML-описание формы и ее элементов. Пример моей формы (её .zml и .cs файлы) можно скачать здесь Мне нужно назначить в этой форме горячую клавишу F5 методу формы RunQuery. Поскольку у формы нет событий типа KeyDown, KeyUp и KeyPress, то надо действовать как-то по-другому. Нашел на StackOverflow статью, и пример кода к этой методике здесь
KeyGesture CloseCmdKeyGesture = new KeyGesture( Key.L, ModifierKeys.Alt);
KeyBinding CloseKeyBinding = new KeyBinding( ApplicationCommands.Close, CloseCmdKeyGesture);
this.InputBindings.Add(CloseKeyBinding);
На основе этого примера я написал свой код и вставил его в метод Loaded формы:
KeyGesture RunQueryKeyGesture = new KeyGesture( System.Windows.Input.Key.F5, ModifierKeys.None);
KeyBinding RunQueryKeyBinding = new KeyBinding( this.RunQuery(null, null), RunQueryKeyGesture);
this.InputBindings.Add(RunQueryKeyBinding);
При попытке скомпилировать солюшен выдает несколько ошибок:
CS1502 The best overloaded method match for 'System.Windows.Input.KeyBinding.KeyBinding(System.Windows.Input.ICommand,
System.Windows.Input.KeyGesture)' has some invalid arguments
CS???? Argument '1': cannot convert from 'void' to
'System.Windows.Input.ICommand'
CS1061 'Parus.Business.Test.QueryExec.RunQueryForm' does not contain
a definition for 'InputBindings' and no extension method
'InputBindings' accepting a first argument of type
'Parus.Business.Test.QueryExec.RunQueryForm' could be found (are you
missing a using directive or an assembly reference?)
Из этого я заключаю, что мой фрагмент this.RunQuery(null, null) не является ICommand. Но как нужно написать чтобы было правильно - не могу догадаться. Кроме того, последняя (третья) ошибка наверно означает что у этой кастомной формы нет ни только событий KeyPress, но и коллекции InputBindings. Неужели я прав, и в этой форме НИКАК нельзя назначить горячую клавишу действию?