2010-11-18 51 views
8

私は、Tabキーを押したときにフォーカスが移動しないように、ウィンドウのすべてのコントロールでIsTabStopをfalseに設定しています(別のものの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.TabNavigationに接続すると、ListViewにが一度追加されます。私はテンプレートItemsControlでこれを行って、それは私には、コントロールにタブが最初の項目を選択しますが、追加のタブがリストボックスの上に、そして次の制御。

この方法に従うと、あなたの例はこれだけに短縮することができます。

私はListViewコントロールでこれをテストしていませんが、あなたにはうれしいことではありません。

関連する問題