wpf navigation tabstop

WPF: ¿Cómo deshabilitar la navegación de pestañas sin deshabilitar también la navegación con la tecla de flecha?



navigation tabstop (2)

En su ventana (o algún antecesor de los controles en los que no desea que la pestaña trabaje) trague la tecla de tabulación.

Puede tragar adjuntando al evento PreviewKeyDown y establecer e.Handled = true cuando la tecla es una pestaña.

Código puro detrás:

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

También puede configurar un controlador de teclado como tal:

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

pero necesitarás un controlador de eventos correspondiente:

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

He configurado IsTabStop como falso en todos los controles de mi ventana, de modo que cuando IsTabStop la tecla Tab, el foco no se mueve (necesito la tecla Tab para otra cosa). Pero al hacerlo, se interrumpe la navegación con la tecla de flecha: hago clic en un elemento en un ListView y luego presiono arriba / abajo ya no cambia el elemento seleccionado.

¿Hay alguna manera de desactivar la navegación de pestañas, pero sin tocar la navegación con la tecla de flecha? Parecen estar relacionados.

Intenté configurar IsTabStop como verdadero y TabNavigation como falso, pero tampoco funciona.

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


Creo que lo que quiere es establecer la propiedad adjunta KeyboardNavigation.TabNavigation a Once en su ListView. He hecho esto con un ItemsControl con plantilla y parece que me da el comportamiento que esperaría, como un ListBox, donde una pestaña en el control seleccionará el primer elemento, pero una pestaña adicional saldrá de la lista en la lista y en el siguiente control

Por lo tanto, siguiendo este método, tu ejemplo puede ser más corto que esto.

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

Sin embargo, no he probado esto con el control ListView, pero no me sorprendería si funciona para usted.