.net - TabIndex vs. KeyboardNavigation.TabIndex en WPF
focus keyboard-navigation (2)
¿Cuál es la diferencia entre TabIndex
y KeyboardNavigation.TabIndex
en WPF? ¿Cuándo usar cada uno?
Algunos controles como CheckBox
tienen propiedad TabIndex
, pero no todos los controles tienen esta propiedad, pero es posible que desee que se centren y participen en la navegación de enfoque, la propiedad adjunta KeyboardNavigation.TabIndex
En tales casos, se puede usar TabIndex
. Un ejemplo de tal control es el Hyperlink
Además de esta clase, KeyboardNavigation proporciona muchas otras funcionalidades para configurar la navegación de enfoque, como el comportamiento de navegación con pestañas, KeyboardNavigationMode, etc.
El comportamiento de navegación de un contenedor de navegación se puede cambiar configurando las propiedades adjuntas de KeyboardNavigation TabNavigation, ControlTabNavigation y DirectionalNavigation. Estas propiedades son de tipo KeyboardNavigationMode y los valores posibles son Continuar, Local, Contener, Ciclo, Una vez y Ninguno. El valor predeterminado es Continuar, lo que significa que el elemento no es un contenedor de navegación.
http://msdn.microsoft.com/en-us/library/aa969768.aspx#Keyboard_Navigation
@akjoshi incluyó una información muy importante sobre TaxIndex en su respuesta, pero pensé que un poco más de explicación ayudaría.
Si tiene un ItemsControl
repite un artículo, terminará con un orden de tabulación como este si no tiene cuidado.
La solución es simple:
Aplique esta propiedad adjunta al contenedor principal de cada artículo repetido.
KeyboardNavigation.TabNavigation="Local"
Esta enumeración tiene todo tipo de valores, pero este es el que se debe usar para los controles anidados.
Tenga en cuenta que he establecido IsTabStop=false
para el ItemsControl
(y no, este no es el código actual para el gráfico anterior).
<ItemsControl ItemsSource="{Binding CurrentItem.CustomsItems}" IsTabStop="False">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ctl:CustomsItem KeyboardNavigation.TabNavigation="Local" Margin="0,0,0,8"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>