Панель Focusable в WPF

Идиоматический код является кодом, который делает общую задачу в распространенном способе для Вашего языка. Это подобно шаблону разработки, но в намного меньшем масштабе. Идиомы отличаются широко языком. Одна идиома в C# могла бы быть должна использовать итератор для итерации через набор, а не цикличное выполнение через него. Другие языки без итераторов могли бы полагаться на идиому цикла.

6
задан Dave Clemmer 26 August 2011 в 16:37
поделиться

2 ответа

После дополнительного исследования Panel имеет фокус клавиатуры и сохраняет его пока не будет нажата клавиша со стрелкой или TAB (что запустит циклическое переключение фокуса).

Я только что добавил обработчик для события KeyDown с ʻe.Handled = true; ' и теперь все работает правильно.

Подводя итог, чтобы иметь фокусируемую панель:

  • добавьте FocusManager.IsFocusScope = "True" в панель
  • , чтобы предотвратить потерю фокуса на стрелках и Клавиша Tab с:
 myPanel.KeyDown + = new KeyEventHandler (
 делегат (отправитель объекта, KeyEventArgs e)
 {
 if (e.Key == Key.Left ||
 e.Key == Key.Up ||
 e.Key == Key.Right ||
 e.Key == Key.Down ||
 e.Key == Key.Tab)
 e.Handled = true;
 }
);

Наконец, установите фокус с помощью myPanel.Focus (); .

2
ответ дан 17 December 2019 в 18:17
поделиться

Если ваша панель не содержит дочерних элементов, даже использование FocusManager.IsFocusScope = "True" не вызовет событие GotFocus. Панель не предназначена для ввода с клавиатуры или фокусировки. Вместо этого в большинстве случаев (например, если дочерний элемент является элементом управления Button) FocusManager.IsFocusScope = "True" даже поглощает события KeyUp / KeyDown. Событие не будет запущено ни для вашего элемента управления, ни для вашей панели.

1
ответ дан 17 December 2019 в 18:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: