9

ウィンドウ内のすべてのコントロールをfalseに設定IsTabStopしたので、Tabキーを押してもフォーカスが移動しません(他の目的でTabキーが必要です)。しかし、これを行うと矢印キーのナビゲーションが壊れます-でアイテムをクリックしてからListView上/下を押しても、選択したアイテムは変更されなくなります。

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

IsTabStoptrueとfalseに設定してみTabNavigationましたが、どちらも機能しません。

<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>
4

2 に答える 2

16

ウィンドウ(またはタブを機能させたくないコントロールの祖先)で、タブキーを飲み込みます。

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;
        }
    }
于 2010-11-18T03:00:28.963 に答える
5

あなたが望むのは、ListViewでKeyboardNavigation.TabNavigation添付プロパティをOnceに設定することだと思います。私はテンプレート化されたItemsControlでこれを行いました.ListBoxのように、コントロールへのタブが最初の項目を選択しますが、追加のタブはリストボックスからすぐにタブで移動します.次のコントロール。

したがって、この方法に従うと、例をこれだけに短縮できる場合があります。

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

ListView コントロールでこれをテストしたことはありませんが、うまく機能しても驚かないでしょう。

于 2011-02-10T07:06:00.243 に答える