Configuración del orden de tabulación en WPF

92

¿Cómo configuro el orden de las pestañas en WPF? Tengo un ItemsControl con algunos elementos expandidos y otros contraídos y me gustaría omitir los contraídos cuando estoy tabulando.

¿Algunas ideas?

Romano
fuente
La respuesta propuesta por Jesse es el camino a seguir ...
Román
que parece ser el comportamiento predeterminado?
JonnyRaa
@ Román ¿quién es Jesse?
Stealth Rabbi
1
@Stealth Rabbi: la respuesta seleccionada. El nombre podría haber cambiado (desde hace 11 años 😆)
Román

Respuestas:

63

Puede omitir elementos en la secuencia de pestañas configurando KeyboardNavigation.IsTabStop en el elemento en XAML.

KeyboardNavigation.IsTabStop="False"

Puede configurar un disparador que alternaría esta propiedad en función del estado expandido.

Pinchazo
fuente
1
También puede ser Focusable = "False", que lo elimina del enfoque del teclado y del orden de tabulación.
Geoff Cox
2
@Geoff Hice esto con un montón de botones y no funcionó, solo para tu información.
ToastyMallows,
Esto permite omitir controles que no desea que formen parte del orden de pestañas, pero hay muchos otros problemas en WPF. El orden de las pestañas no es jerárquico, por lo que si hay otros controles en la pantalla que tienen un orden cero (lo que hacen de forma predeterminada), el orden de las pestañas simplemente no funcionará.
Christian Findlay
90

Si desea establecer explícitamente el orden de tabulación para los elementos en su formulario, se supone que la siguiente propiedad adjunta debe ayudar:

<Control KeyboardNavigation.TabIndex="0" ... />

Digo "se supone que debe ayudar" porque no lo he encontrado muy confiable, aunque probablemente necesite leer más sobre cómo se pretende que se use. Solo publico esta respuesta a medias porque nadie más mencionó esta propiedad.


Tenga en cuenta que en Win RT, la propiedad es solo TabIndex="0".

Dibujó Noakes
fuente
11
El truco consiste en utilizar TabIndex con varios valores de KeyboardNavigation.TabNavigation en el elemento principal. Me encuentro usando TabNavigation "Local" con mayor frecuencia. :)
Greg D
Tuve que agregar esto a cada uno de mis controles, en lugar de simplemente agregarlos a los diferentes StackPanels que hospedan dichos controles.
DJ van Wyk
Encuentro que la configuración <DockPanel Panel.ZIndex="2">ayuda a ordenar el punto de entrada de los paneles de nivel superior.
Avenmore
25

<Control KeyboardNavigation.TabIndex="0" ... /> Funciona perfectamente bien ... Por ejemplo-

<ComboBox Height="23" 
          Margin="148,24,78,0" 
          Name="comboBoxDataSet"
          VerticalAlignment="Top"
          SelectionChanged="comboBoxDestMarketDataSet_SelectionChanged"
          DropDownOpened="comboBoxDestMarketDataSet_DropDownOpened"
          KeyboardNavigation.TabIndex="0" />
<ComboBox Height="23" 
          Margin="148,56,78,0" 
          Name="comboBoxCategory" 
          VerticalAlignment="Top" 
          SelectionChanged="comboBoxDestCategory_SelectionChanged"
          DropDownOpened="comboBoxDestCategory_DropDownOpened"
          KeyboardNavigation.TabIndex="1" />

Le permitirá navegar a través de estos dos cuadros combinados usando la tecla TAB.

Pankaj
fuente
13

Creo que hay una solución mucho más fácil aquí, en la parte superior dentro de su control o ventana o lo que sea, podría agregar:

KeyboardNavigation.TabNavigation="Cycle"

Esto también ignora automáticamente las pestañas contraídas.

AltF4_
fuente
6

Otra alternativa que me ha funcionado en el pasado es simplemente eliminar todas las TabIndexdeclaraciones explícitas y dejar que los controles usen el orden en el que están declarados en XAML.

Esto, por supuesto, puede requerir que reordene sus controles. Pero esta es una simple operación de copiar y pegar.

Gustavo Mori
fuente
5
El problema es que no puede simplemente reordenar los controles en cosas como DockPanels donde el orden en que los agrega no coincide con el orden de las pestañas. Por ejemplo, considere acoplar botones a la derecha. Acopla el último primero, el segundo al último segundo, etc. pero desea invertir el orden de tabulación. Eso es lo que más me hace tropezar. En momentos como este, extraño los viejos días de VB6 (no el idioma, solo esta función) donde eliges 'Establecer orden de pestaña' y simplemente haces clic en todos tus controles. Sencillo y dulce. Es frustrante que no tengamos nada como eso aquí en 2018.
Mark A. Donohoe
1
@Mark o 2020 :). Ordenar pestañas en WPF es increíblemente complicado, siempre que necesito un orden personalizado debo pasar todo el día luchando con su imprevisibilidad. En Winforms era una tarea mundana que toma unos minutos por ventana.
bokibeg
0

Puede usar KeyboardNavigation.TabNavigation = "None" para omitir por completo la tabulación para un control específico.

usuario2306815
fuente