WPF:どのように無効にタブナビゲーションにも、矢印キーのナビゲーションを無効にせずに?

StackOverflow https://stackoverflow.com/questions/4210659

  •  25-09-2019
  •  | 
  •  

質問

私は、Tabキーを押したときに、フォーカスが(私は何か他のもののためにTabキーを必要とする)に移動しないように、私のウィンドウ内のすべてのコントロールでfalseに設定さIsTabStopを持っています。しかし、この休憩を行うとキーナビゲーション矢印 - 私はListViewでアイテムをクリックして、アップ/ダウン押すと、もはや選択した項目を変更しません。

は無効タブナビゲーションに方法はありますが、キーナビゲーション矢印触れることなく?彼らは関連しているようです。

私はfalseに真とIsTabStopTabNavigationを設定しようとしたが、それはどちらか動作しません。

<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>
役に立ちましたか?

解決

あなたのウィンドウ(またはあなたが仕事にタブを望んでいないコントロールの一部の祖先)にタブキーを飲み込むます。

あなたは鍵がタブのとき=真e.Handled PreviewKeyDownイベントとセットに取り付けることによって、それを飲み込むことができます。

ピュアコードの後ろます:

 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;
        }
    }

他のヒント

私が何をしたいことは、あなたのListView上の を一度にある[ KeyboardNavigation.TabNavigation の添付プロパティを設定することであると信じています。私はテンプレートのItemsControlでこれをやったし、私がコントロールにタブが右のリストボックスから出て、上に最初の項目が、追加のタブの意志]タブを選択しますListBoxのように期待するという行動を与えているようです次のコントロールます。

この方法は、あなたの次の例だからこれまでshortendことができる可能性があります。

<ListView ItemContainerStyle="{StaticResource ItemCommon}"
          KeyboardNavigation.TabNavigation="Once" />

私はしかし、ListViewコントロールでこれをテストしていませんが、それはあなたのために働く場合、私は驚かないだろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top