Я пытаюсь фиксировать события нажатия клавиш в любом месте моего приложения WPF, независимо от того, какой элемент пользовательского интерфейса имеет фокус. В настоящее время мне не везет. Может ли кто-нибудь предложить некоторые стратегии, которые я, возможно, не пробовал? Или, в идеале, ответьте, например, «о, это просто, просто сделайте это»
. Это распределенное приложение, в котором есть система чата. Эффект, который я ищу, заключается в том, что пользователь может начать вводить сообщение чата в любое время, не переключаясь на стандартное окно чата. Я сам выведу их сообщение в приложении, с использованием объектов FormattedText. Это важно, потому что это означает, что в приложении нигде нет элементов ввода текста.
Моя структура XAML выглядит примерно так:
<MainWindow>
<Canvas 1>
<Canvas 2>
<Image 1 />
</Canvas 2>
<Image 2 />
</Canvas 1>
</MainWindow>
Я программно добавляю элементы в Canvas 2 и манипулирую Image 2, поэтому оно имеет такую структуру .
Я пробовал добавить события KeyDown, KeyUp и Preview в MainWindow и Canvas 1, но ни одно из них не срабатывает (я проверяю с помощью точек останова). Я также, прочитав здесь другой связанный вопрос, попытался вручную установить фокус на главном окне в методе Loaded ().
Я понимаю, что на этом сайте есть много связанных вопросов, но они мне не помогли, потому что :
Спасибо, что нашли время, чтобы прочитать мой длинный пост, и спасибо за предложения.
Обновить (после комментария Рэйчел) Когда я вставляю TextBox и устанавливаю фокус на TextBox, срабатывает метод ключевого события на уровне MainWindow. Так что это работает так, как рекламируется.
Однако мне бы очень хотелось вообще не иметь явного виджета ввода текста в приложении. Я бы хотел, чтобы пользователь мог просто начать печатать, чтобы составить сообщение.