Impostazione dell'ordine di tabulazione in WPF


92

Come si imposta l'ordine di tabulazione in WPF? Ho un ItemsControl con alcuni elementi espansi e alcuni compressi e vorrei saltare quelli compressi durante la tabulazione.

Qualche idea?


La risposta proposta da Jesse è la strada da percorrere ...
Román

quello sembra essere il comportamento predefinito?
JonnyRaa

@ Román chi è Jesse?
Stealth Rabbi

1
@ Stealth Rabbi: la risposta selezionata. Il nome potrebbe essere cambiato (da 11 anni fa 😆)
Román

Risposte:


63

Puoi ignorare gli elementi nella sequenza di tabulazione impostando KeyboardNavigation.IsTabStop sull'elemento in XAML.

KeyboardNavigation.IsTabStop="False"

È possibile impostare un trigger che attivi questa proprietà in base allo stato espanso.


1
Puoi anche è Focusable = "False" che lo rimuove dal focus della tastiera e dall'ordine di tabulazione.
Geoff Cox

2
@ Geoff L'ho fatto con un mucchio di pulsanti e non ha funzionato, solo fyi.
ToastyMallows

Ciò consente di saltare i controlli che non si desidera far parte dell'ordinamento di tabulazione, ma ci sono molti altri problemi in WPF. Gli ordini di tabulazione non sono gerarchici, quindi, se ci sono altri controlli sullo schermo che hanno un ordine zero (cosa che fanno per impostazione predefinita), l'ordinamento di tabulazione semplicemente non funzionerà.
Christian Findlay

90

Se vuoi impostare esplicitamente l'ordine di tabulazione per gli elementi nel tuo modulo, la seguente proprietà allegata dovrebbe aiutare:

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

Dico "dovrebbe aiutare" perché non l'ho trovato molto affidabile anche se probabilmente ho bisogno di leggere di più su come dovrebbe essere utilizzato. Inserisco solo questa risposta a metà perché nessun altro ha menzionato questa proprietà.


Nota che in Win RT, la proprietà è solo TabIndex="0".


11
Il trucco è usare TabIndex con vari valori di KeyboardNavigation.TabNavigation nell'elemento genitore. Mi ritrovo a utilizzare più spesso TabNavigation "Local". :)
Greg D

Ho dovuto aggiungerlo a ciascuno dei miei controlli, invece di aggiungerli ai diversi StackPanel che ospitano detti controlli.
DJ van Wyk

Trovo ambientazione <DockPanel Panel.ZIndex="2"> aiuti a ordinare il punto di ingresso dei pannelli di livello superiore.
avenmore

25

<Control KeyboardNavigation.TabIndex="0" ... /> Funziona perfettamente bene ... Ad esempio-

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

Ti permetterà di navigare attraverso queste due caselle combinate usando il tasto TAB.


13

Penso che qui ci sia una soluzione molto più semplice, nella parte superiore del tuo controllo o finestra o qualsiasi altra cosa, potresti aggiungere:

KeyboardNavigation.TabNavigation="Cycle"

Anche questo ignora automaticamente le schede compresse.


6

Un'altra alternativa che ha funzionato per me in passato è semplicemente rimuovere tutto ciò che è esplicito TabIndex istruzioni e lasciare che i controlli utilizzino l'ordine in cui sono dichiarati in XAML.

Questo, ovviamente, potrebbe richiedere di riordinare i controlli. Ma questa è una semplice operazione di copia-incolla.


4
Il problema è che non puoi semplicemente riordinare i controlli in cose come DockPanels in cui l'ordine in cui li aggiungi non corrisponde all'ordine di tabulazione. Ad esempio, considera di agganciare i pulsanti a destra. Si aggancia per primo l'ultimo, il secondo all'ultimo secondo, ecc. Ma si desidera invertire l'ordine di tabulazione. Questo è ciò che mi fa incazzare di più. In tempi come questo mi mancano i vecchi giorni VB6 (non la lingua, solo questa funzione) in cui scegli "Imposta ordine di tabulazione" e fai clic su tutti i controlli. Semplice e dolce. Frustrante non abbiamo niente del genere qui nel 2018.
Mark A. Donohoe

0

Puoi utilizzare KeyboardNavigation.TabNavigation = "None" per saltare completamente il Tabbing per un controllo specifico.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.