У меня есть простое приложение (сетка с 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.