Frage

Ich habe Satz IsTabStop auf falsch auf alle Bedienelemente in meinem Fenster, so dass, wenn ich die Tab-Taste drücken, wird der Fokus nicht bewegen (ich die Tab-Taste für etwas anderes brauchen). Aber dies zu tun Pausen Pfeil Navigation - I in einem ListView auf ein Element klicken und dann die Taste nach oben / unten nicht das ausgewählte Element mehr ändert

.

Gibt es eine Möglichkeit zu deaktivieren Tabulatornavigation, aber ohne sie zu berühren Pfeiltaste Navigation? Sie scheinen in Beziehung gesetzt werden.

Ich habe versucht IsTabStop zu wahren und TabNavigation auf false gesetzt, aber es funktioniert auch nicht.

<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>
War es hilfreich?

Lösung

Auf dem Fenster (oder ein Vorfahre der Steuerelemente, die Sie nicht Registerkarte Arbeit wollen) schluckt die Tab-Taste.

Sie können es schlucken, indem zum PreviewKeyDown Ereignisse Anbringen und Satz e.Handled = true, wenn der Schlüssel ist ein Tab.

Reiner Code hinter:

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

Sie können auch ein Keyboard Handler als solche eingestellt:

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

, aber Sie werden ein entsprechenden Ereignishandler müssen:

   private void Window_PreviewKeyDown(object sender, KeyEventArgs e)

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

Andere Tipps

Ich glaube, was Sie wollen, ist die setzen KeyboardNavigation.TabNavigation angebrachte Eigenschaft auf Wenn auf der Listview. Ich habe dies mit einem Templat Item getan und es scheint mir, das Verhalten zu geben, dass ich aus wie ein ListBox erwarten würde, wo ein Reiter in die Steuerung wird das erste Element, sondern eine zusätzliche Registerkarte Registerkarte rechts aus dem Listenfeld auswählen und auf die nächste Kontrolle.

So nach dieser Methode Ihres Beispiel in der Lage sein kann, diese nur zu gekürzt nach unten.

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

Ich habe nicht getestet dies mit dem Listview-Steuerelement jedoch aber ich wäre nicht überrascht, wenn es für Sie arbeitet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top