2010-11-18 1 views
8

내 윈도우의 모든 컨트롤에서 IsTabStop을 false로 설정 했으므로 Tab 키를 누르면 포커스가 이동하지 않습니다. 다른 키는 Tab 키가 필요합니다. 그러나이 작업을 수행하면 화살표 키 탐색이 중단됩니다. ListView에있는 항목을 클릭 한 다음 위/아래를 누르면 선택한 항목이 더 이상 변경되지 않습니다.WPF : 화살표 키 탐색을 비활성화하지 않고 탭 탐색을 비활성화하는 방법?

화살표 키 탐색을 터치하지 않고 탭 탐색을 사용 중지하는 방법이 있습니까? 그들은 서로 관련이있는 것 같습니다.

IsTabStop을 true로 설정하고 TabNavigation을 false로 설정하려고했으나 작동하지 않습니다.

<ListView ItemContainerStyle="{StaticResource ItemCommon}" IsTabStop="False"> 
    <ListView.Resources> 
     <Style x:Key="ItemCommon"> 
      <Setter Property="IsTabStop" Value="False"/> 
      <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/> 
      <Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle"/> 
     </Style> 
    </ListView.Resources> 
</ListView> 

답변

14

창 (또는 탭의 작동을 원하지 않는 조상)에서는 탭 키를 삼키십시오.

PreviewKeyDown 이벤트에 첨부하여이를 삼켜 버리고 키가 탭 일 때 e.Handled = true로 설정할 수 있습니다. 뒤에

순수 코드 : 또한 같은 키보드 핸들러를 설정할 수 있습니다

public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      this.PreviewKeyDown += MainWindowPreviewKeyDown; 
     } 

     static void MainWindowPreviewKeyDown(object sender, KeyEventArgs e) 
     { 
      if(e.Key == Key.Tab) 
      { 
       e.Handled = true; 
      } 
     } 
    } 

:

<Window x:Class="TabSwallowTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     Keyboard.PreviewKeyDown="Window_PreviewKeyDown" > 

    <StackPanel> 
     <TextBox Width="200" Margin="10"></TextBox> 
     <TextBox Width="200" Margin="10"></TextBox> 
    </StackPanel> 
</Window> 

하지만 당신은 이벤트 핸들러가 필요합니다 :

private void Window_PreviewKeyDown(object sender, KeyEventArgs e) 

    { 
     if (e.Key == Key.Tab) 
     { 
      e.Handled = true; 
     } 
    } 
+0

니스. 나는 거의 이것을하고 있었지만, PreviewKeyUp를 처리하지 않고 PreviewKeyDown이 아니었기 때문에 e.Handled = true로 설정했지만 너무 늦어서 어딘가에 초점이 맞았습니다. – Jon

+0

이렇게하면 해당 Tabber 내의 컨트롤을 통해 탭 이동하는 것도 방지 할 수 있습니다. – bytecode77

5

I을 당신이 원하는 것을 믿는다면 키보드를 설정하는 것입니다 Navigation.Tab 네비게이션 첨부 된 속성 ListView에 한 번. 나는 템플릿이있는 ItemsControl을 사용하여이 작업을 수행했으며, ListBox와 같이 컨트롤의 탭이 첫 번째 항목을 선택하지만 추가 탭은 목록 상자에서 오른쪽으로 탭이있는 곳에서 기대할 수있는 동작을 제공하는 것으로 보입니다. 다음 컨트롤.

이 방법을 따르면 예제가 바로 여기까지 단축 될 수 있습니다.

그러나 ListView 컨트롤로 테스트하지는 않았지만 제대로 작동하는지는 놀랄 일이 아닙니다.