Как в 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. Неужели я прав, и в этой форме НИКАК нельзя назначить горячую клавишу действию?


Ответы (0 шт):