1
아래에 ListView가있는 TextBox가 있고 TextBox에 포커스가 있으면 ListView로 위아래 화살표 키를 리디렉션하고 싶습니다. 애드혹을하기 전에 누군가가 컨트롤간에 키를 리디렉션하는 방법을 알고 있습니까?TextBox에서 ListBox로 방향 화살표 키를 리디렉션
아래에 ListView가있는 TextBox가 있고 TextBox에 포커스가 있으면 ListView로 위아래 화살표 키를 리디렉션하고 싶습니다. 애드혹을하기 전에 누군가가 컨트롤간에 키를 리디렉션하는 방법을 알고 있습니까?TextBox에서 ListBox로 방향 화살표 키를 리디렉션
이상적으로는 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;
}
}
이 코드를 올바르게 이해하면 위로 및 아래로 만들기가 탭과 Shift + Tab처럼 작동합니다. 요점은 Cursor가 여전히'TextBox'에서 깜빡이면서'ListBox'의 다음 항목과 이전 항목으로 이동하는 것입니다. 키 리디렉션을 통해이 작업을 수행하고자했지만 'PreviewKeyDown'을 사용하여 선택한 항목을 수동으로 변경합니다. – Qwertie
예, 원래의 의도에 대해 오해했습니다. PreviewKeyDown은 아마도 ListBox.SelectedIndex를 적절하게 사용하고 증가/감소시키는 이벤트와 같을 것입니다. –