2008-12-11 9 views
80

Comment définir l'ordre de tabulation dans WPF? J'ai un ItemsControl avec quelques éléments développés et certains s'est effondré et voudrait sauter les effondrés quand je tabbing.Définition de l'ordre des onglets dans WPF

Des idées?

+0

La réponse proposée par Jesse est la voie à suivre ... –

+0

qui semble être le comportement par défaut? –

Répondre

55

Vous pouvez ignorer des éléments dans la séquence d'onglets en définissant KeyboardNavigation.IsTabStop sur l'élément dans XAML.

KeyboardNavigation.IsTabStop="False" 

Vous pouvez configurer un déclencheur qui bascule cette propriété en fonction de l'état étendu.

+0

Vous pouvez également être Focusable = "False" ce qui le supprime du focus du clavier ainsi que de l'ordre des onglets. –

+1

@Geoff je l'ai fait avec un tas de boutons et ça n'a pas fonctionné, juste fyi. – ToastyMallows

-9

De plus, .NET 3.0 dispose d'une classe qui définit automatiquement l'ordre de tabulation et vous pouvez le remplacer en fonction des sections de votre formulaire.

(new TabOrderManager(this)).SetTabOrder(TabOrderManager.TabScheme.AcrossFirst); 
+11

Le TabOrderManager n'est-il pas uniquement une classe Windows Forms? – Krimson

+6

Ne fonctionne pas dans WPF. – theMayer

+2

Il s'agit d'une question WPF, pas Windows Forms. – Martin

78

Si vous souhaitez définir explicitement l'ordre de tabulation des éléments de votre formulaire, ce qui suit la propriété ci-joint est censé aider:

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

Je dis « censé aider » comme je l'ai pas Je l'ai trouvé très fiable, mais j'ai probablement besoin de lire plus sur la façon dont il est destiné à être utilisé. Je ne poste que cette réponse à moitié cuite parce que personne d'autre n'a mentionné cette propriété.


Notez que dans Win RT, la propriété est juste TabIndex="0".

+10

L'astuce consiste à utiliser TabIndex avec diverses valeurs de KeyboardNavigation.TabNavigation dans l'élément parent. Je me retrouve en train d'utiliser TabNavigation "Local" le plus souvent. :) –

+0

J'ai dû ajouter ceci à chacun de mes contrôles, au lieu de simplement les ajouter aux différents StackPanels qui hébergent les contrôles. –

+0

Je trouve le réglage '' aide à commander le point d'entrée des panneaux de niveau supérieur. – avenmore

22

<Control KeyboardNavigation.TabIndex="0" ... /> fonctionne parfaitement bien ... Pour exemple-

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

vous permettra de naviguer à travers ces deux zones de liste déroulante à l'aide de la touche TAB.

9

Je pense qu'il ya une solution beaucoup plus facile ici, en haut de votre contrôle ou d'une fenêtre ou autre, vous pouvez ajouter:

KeyboardNavigation.TabNavigation="Cycle" 

Cela a également les onglets ne tient pas compte automatiquement effondrés.

4

Une autre alternative qui a fonctionné pour moi dans le passé est de supprimer simplement toutes les instructions explicites TabIndex, et de laisser les contrôles utiliser l'ordre dans lequel ils sont déclarés en XAML fonctionnent leur magie.

Ceci, bien sûr, peut vous obliger à réorganiser vos commandes. Mais ceci est une simple opération de copier-coller.

Questions connexes