2013-04-10 3 views

답변

1

이상적으로는 KeyboardNavigation.DirectionalNavigation (http://msdn.microsoft.com/en-us/library/system.windows.input.keyboardnavigation.directionalnavigation.aspx)을 설정할 수 있지만 텍스트 상자가 방향키를 처리하는 방식 때문에 이것이 무시 될 것이라고 생각합니다.

대신에 PreviewKeyDown을 처리하여 위쪽 화살표와 아래쪽 화살표가 탭으로 표시되도록 할 수 있습니다.

<StackPanel PreviewKeyDown="StackPanel_PreviewKeyDown" > 
     <TextBox Text="Test" TabIndex="0" /> 
     <ListView TabIndex="1"> 
      <ListViewItem>One</ListViewItem> 
      <ListViewItem>Two</ListViewItem> 
      <ListViewItem>Three</ListViewItem> 
     </ListView> 
    </StackPanel> 

    private void StackPanel_PreviewKeyDown(object sender, KeyEventArgs e) 
    { 
     switch (e.Key) 
     { 
      case Key.Up: 

       ((UIElement)Keyboard.FocusedElement).MoveFocus(new TraversalRequest(FocusNavigationDirection.Previous)); 
       e.Handled = true; 

       break; 
      case Key.Down: 
       ((UIElement)Keyboard.FocusedElement).MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 
       e.Handled = true; 

       break; 
     } 
    } 
+0

이 코드를 올바르게 이해하면 위로 및 아래로 만들기가 탭과 Shift + Tab처럼 작동합니다. 요점은 Cursor가 여전히'TextBox'에서 깜빡이면서'ListBox'의 다음 항목과 이전 항목으로 이동하는 것입니다. 키 리디렉션을 통해이 작업을 수행하고자했지만 'PreviewKeyDown'을 사용하여 선택한 항목을 수동으로 변경합니다. – Qwertie

+0

예, 원래의 의도에 대해 오해했습니다. PreviewKeyDown은 아마도 ListBox.SelectedIndex를 적절하게 사용하고 증가/감소시키는 이벤트와 같을 것입니다. –

관련 문제