Определите привязки клавиш в UserControl, но применимы ли они для всего окна?

Существует целый ряд сочетаний клавиш, которые я хотел бы использовать в масштабах всего приложения, независимо от того, где в данный момент находится фокус.

На данный момент у меня есть те, определенные как <Window.InputBindings> в моем главном окне XAML. Все хорошо, но...
Лента инкапсулирована как отдельный пользовательский элемент управления, и все сочетания клавиш, естественно, связаны с кнопками, которые находятся на этой ленте.
Следовательно, мне не очень нравится запах двух частей логики приложения, имеющих одинаковую функциональность, распределенных по двум классам.

В идеале я хотел бы определить привязки клавиш как <Window.InputBindings>, но в UserControl, а не в окне. Очевидно, что это не может быть сделано с синтаксисом XAML, но только <UserControl.InputBindings> - увы, это сделало бы их доступными, только когда фокус находится на ленте (что означает никогда).

Какие-либо предложения?

Спасибо Алекс

1 ответ

Решение

В конструкторе вашего элемента управления или в его обработчике событий Loaded() пусть он найдет окно, в котором он находится (рекурсивно используйте VisualTreeHelper.GetParent(this), пока GetType не станет Window...), затем добавьте к нему требуемые InputBindings. окно.

Другие вопросы по тегам