У меня есть простое приложение (сетка с 6 кнопками - 2 ряда по 3 - на нем для тестирования), и я обрабатываю клавиши со стрелками влево и вправо следующим образом.
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
FocusNavigationDirection focusDirection = new System.Windows.Input.FocusNavigationDirection();
switch (e.Key)
{
case Key.Left:
focusDirection = System.Windows.Input.FocusNavigationDirection.Left;
break;
case Key.Right:
focusDirection = System.Windows.Input.FocusNavigationDirection.Right;
break;
default:
break;
}
TraversalRequest request = new TraversalRequest(focusDirection);
// Gets the element with keyboard focus.
UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;
// Change keyboard focus.
if (elementWithFocus != null)
{
elementWithFocus.MoveFocus(request);
}
}
К сожалению, это ведет себя не так, как я ожидаю, поскольку кажется, что фокус всегда перемещается в направлении, противоположном указанному в FocusNavigationDirection.
Любые мысли о том, почему это будет? Документация MSDN немного расплывчата в отношении того, как "слева от " определено.
На случай, если это необходимо, я также определил позиции табуляции для каждой из кнопок с 1 по 6.