Manoj_Baddi Ответов: 1

Как назначить горячие клавиши (ярлыки) для приложения WPF


Я должен назначить сочетания клавиш для открытия окна в приложении WPF(шаблон MVVM).Сочетание клавиш должно работать из любого окна в моем приложении. Эти ключи должны работать на уровне приложения и не должны быть глобальными. Может ли кто-нибудь помочь мне с этим?

Что я уже пробовал:

Я пробовал импортировать User32.dll и метод RegisterHotKey. Но это присваивает ключ глобально. Даже если я сверну свое приложение и нажму любую комбинацию клавиш, назначенное окно откроется.

[DllImport("user32.dll")]
static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers,int vk);

1 Ответов

Рейтинг:
2

jimmson

Что вам нужно, так это привязка командного ключа.

Класс Привязки Ключей (System.Окна.Ввод)[^] (прокрутите вниз, например)


Manoj_Baddi

Привязка клавиш работает только тогда, когда я фокусируюсь на этом окне. Мне нужен ярлык, чтобы работать независимо от того, где я сосредоточен во всем приложении.

jimmson

Ну, вы можете просто добавить привязку ключа к каждому окну. Он может указывать на одну и ту же команду, вам не нужно ее дублировать.

Manoj_Baddi

Спасибо. Но у меня в приложении более 40 окон. Разве нет другого способа достичь этого?

jimmson

Да, это так. Есть ли у этих окон какой-то общий родитель? Вы можете добавить привязку команды к родительскому элементу (в коде, а не в xaml).

Manoj_Baddi

Да, есть окно, которое является владельцем остальных окон.Не могли бы вы помочь мне с примером?

jimmson

Владелец - это что-то другое. Он будет работать с общим родителем, классом, от которого они наследуют. Они наследуют от класса окна?

Manoj_Baddi

Нет, они не наследуются от класса главного окна!

jimmson

Ладно, так от чего же они наследуют?

Manoj_Baddi

Я имею в виду, что они действительно наследуются от класса Window. Но в моем приложении нет отношений между родителями и детьми.

jimmson

Отлично, так что вам нужно сделать:
1) создайте новый класс, который будет наследоваться от класса Window
2) в конструкторе этого класса добавьте привязку ключа (как в примерах ссылок)
3) унаследуйте свои окна от этого нового класса

Это не проверено, но я почти уверен, что это должно сработать. Просто убедитесь, что у вас есть доступная команда (возможно, Вам также потребуется добавить привязки команд к конструктору).
Я бы рекомендовал сначала попробовать его на одном окне.

Manoj_Baddi

Огромное спасибо.Я попробую!