Как определить, было ли событие нажатия кнопки вызвано клавиатурой или мышью в WPF? - PullRequest
4 голосов
/ 07 декабря 2008

Есть ли простой способ сказать, что вызвало событие Click кнопки, кроме установки нескольких флагов в обработчиках событий Mouse / Key Up / Down? В настоящее время меня интересует только отличие мыши от всего остального, но было бы неплохо по возможности обрабатывать стилус и другие типы ввода. Должен ли я создать свой собственный кнопочный элемент управления, чтобы добиться этого?

Редактировать: Чтобы уточнить, почему я забочусь: в данном конкретном случае я пытаюсь реализовать кнопки «следующий» и «предыдущий» для своего рода средства просмотра изображений. Изображения могут иметь различный размер, и положение кнопок будет меняться (поэтому они всегда располагаются по центру под изображением). Весьма раздражает следить за такими кнопками мышью, если вам нужно прокрутить несколько изображений, поэтому я хочу, чтобы положение мыши оставалось постоянным относительно нажатой кнопки, но только если она была нажата мышью, а не клавиатурой.

Edit2: не имеет значения, находятся ли кнопки сверху или снизу, так как центр может измениться в любом случае. «Средство просмотра изображений» здесь - это просто абстракция, и в данном конкретном случае для меня важно, чтобы верхний левый угол изображения сохранял свою позицию, но это выходит за рамки вопроса, чтобы перейти к деталям. Масштабирование изображения не так тривиально и в таком приложении, поэтому я хочу знать ответ на вопрос, который я задал, не вдаваясь в обсуждение реализации пользовательского интерфейса.

Ответы [ 5 ]

8 голосов
/ 09 декабря 2008
if (InputManager.Current.MostRecentInputDevice is KeyboardDevice)
0 голосов
/ 09 декабря 2008

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

0 голосов
/ 07 декабря 2008

Не могли бы вы уточнить, почему вас это волнует?

Написав много пользовательских элементов управления за прошедшие годы, я не могу вспомнить ни одного случая, когда бы меня волновало, как вызывалось событие щелчка. (За исключением этого предварительного сбоя жизненного цикла элемента управления VB6, который вызывал фокус с потерей фокуса при щелчке в другом порядке, в зависимости от того, нажали ли вы кнопку, использовали клавишу ускорения или нажали ENTER по умолчанию).

0 голосов
/ 07 декабря 2008

Лично меня раздражает, когда люди размещают кнопки внизу форм Windows и веб-страниц. Прочитайте некоторую литературу по пользовательскому интерфейсу, и вы обнаружите, что большинство людей даже не заходят так далеко, если они не находят что-то интересное на странице / форме. Мне нравится, когда я могу нажимать «Далее», как только узнаю, что контент меня не интересует, поэтому держите навигационные кнопки на видном месте сверху.

Я бы поставил prev / next вверху картинки, где вы можете контролировать их положение. Танцевание этих кнопок противоречит большинству мнений о согласованности пользовательского интерфейса. Дальнейшее создание другого опыта для пользователя мыши и пользователя клавиатуры также противоречит большинству современных знаний о хорошем дизайне пользовательского интерфейса.

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

0 голосов
/ 07 декабря 2008

Вместо этого вы должны обрабатывать события MouseXXX, StylusXXx и KeyboardXXX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...