событие нажатия клавиши silverlight не срабатывает для клавиш со стрелками
-
03-07-2019 - |
Вопрос
У меня есть холст внутри прокрутки. Я прикрепил обработчик события keydown к scrollview. Для большинства ключей вызывается обработчик. Р>
Однако для клавиш со стрелками обработчик не вызывается. Вместо этого вид прокрутки прокручивается в соответствующем направлении.
Я также прикрепил обработчик keyup к просмотру прокрутки, и вызывается keyup для клавиш со стрелками.
Есть ли способ получить событие нажатия клавиши со стрелкой здесь?
Решение 2
Я нашел этот глупый взлом, чтобы заставить его работать. Установка скролл-просмотра, чтобы он не был табуляцией, удерживает его от съедания ключевых событий ... но потом у меня появилось еще одно текстовое поле на странице, которое внезапно ВСЕГДА было сфокусировано, потому что скролл-просмотр больше не выполнялся. Поэтому я исправил это, позволив невидимому текстовому полю сфокусироваться.
scrollView.IsTabStop = false;
invisibleTextBox.Foreground = new SolidColorBrush(Colors.Transparent);
invisibleTextBox.Background = new SolidColorBrush(Colors.Transparent);
Canvas.SetZIndex(invisibleTextBox, -1000);
invisibleTextBox.KeyDown += new KeyEventHandler(HandleKeyDown);
invisibleTextBox.KeyUp += new KeyEventHandler(HandleKeyUp);
Редактировать: мне также пришлось убрать текстовое поле с холста, потому что, несмотря на то, что оно было невидимым, его контур все еще отображался.
2-е редактирование. Я использовал текстовое поле, потому что это было первое, что я нашел, чтобы можно было захватывать события KeyDown. Тем не менее, UserControl может. Поэтому, вероятно, было бы лучше использовать UserControl вместо невидимого текстового поля. При необходимости вы можете вызвать Focus () в UserControl.
Другие советы
Просто используйте событие KeyUp. Работает как шарм.
Это возможный ответ - у меня не было возможности проверить это. У меня были подобные проблемы в прошлом, когда контроль потребляет события, прежде чем вы сможете их получить. Есть несколько вещей, которые вы можете попробовать:
<Ол>За исключением 1) все это действительно считается хаком, но удачи, я надеюсь, что один из них вам подходит!
" Используйте событие PreviewKeyDown, я думаю, что так оно и называется. Это может позволить вам попасть на событие до того, как оно будет использовано элементом управления. & Quot;
Это работает. Просто установите аргументы события " Handled = true " и ScrollViewer (или ListBox) не будет захватывать событие после того, как вы уже обработали его. Мне не нужно было использовать свойство IsTabStop для ListBox; это, похоже, ничего не делало.