Festlegen der Registerkartenreihenfolge in WPF

92

Wie lege ich die Tab-Reihenfolge in WPF fest? Ich habe ein ItemsControl, bei dem einige Elemente erweitert und einige reduziert sind, und möchte die reduzierten Elemente überspringen, wenn ich tippe.

Irgendwelche Ideen?

Römisch
quelle
Jesses vorgeschlagene Antwort ist der richtige Weg ...
Román
das scheint das Standardverhalten zu sein?
JonnyRaa
@ Román wer ist Jesse?
Stealth Rabbi
1
@ Stealth Rabbi: die ausgewählte Antwort. Der Name könnte sich geändert haben (von vor 11 Jahren 😆)
Román

Antworten:

63

Sie können Elemente in der Registerkartenfolge überspringen, indem Sie KeyboardNavigation.IsTabStop für das Element in XAML festlegen.

KeyboardNavigation.IsTabStop="False"

Sie können einen Trigger einrichten, der diese Eigenschaft basierend auf dem erweiterten Status umschaltet.

Jab
quelle
1
Sie können auch Focusable = "False" verwenden, wodurch der Tastaturfokus sowie die Tabulatorreihenfolge entfernt werden.
Geoff Cox
2
@Geoff Ich habe das mit ein paar Knöpfen gemacht und es hat nicht funktioniert, nur zu Ihrer Information.
ToastyMallows
Dies ermöglicht das Überspringen von Steuerelementen, die nicht Teil der Tab-Reihenfolge sein sollen, aber es gibt viele andere Probleme in WPF. Tabulatorreihenfolgen sind nicht hierarchisch. Wenn also andere Steuerelemente auf dem Bildschirm eine Nullreihenfolge haben (was standardmäßig der Fall ist), funktioniert die Tabulatorreihenfolge einfach nicht.
Christian Findlay
90

Wenn Sie die Tabulatorreihenfolge für Elemente in Ihrem Formular explizit festlegen möchten, soll die folgende angehängte Eigenschaft helfen:

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

Ich sage "soll helfen", da ich es nicht sehr zuverlässig fand, obwohl ich wahrscheinlich mehr darüber lesen muss, wie es verwendet werden soll. Ich poste diese halbherzige Antwort nur, weil sonst niemand diese Eigenschaft erwähnt hat.


Beachten Sie, dass in Win RT die Eigenschaft nur ist TabIndex="0".

Drew Noakes
quelle
11
Der Trick besteht darin, TabIndex mit verschiedenen Werten von KeyboardNavigation.TabNavigation im übergeordneten Element zu verwenden. Ich benutze am häufigsten "Local" TabNavigation. :)
Greg D
Ich musste dies zu jedem meiner Steuerelemente hinzufügen, anstatt sie nur zu den verschiedenen StackPanels hinzuzufügen, die diese Steuerelemente hosten.
DJ van Wyk
Ich finde, dass die Einstellung <DockPanel Panel.ZIndex="2">hilft, den Einstiegspunkt für Panels der obersten Ebene zu bestellen.
Avenmore
25

<Control KeyboardNavigation.TabIndex="0" ... /> Funktioniert einwandfrei ... Zum Beispiel-

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

Ermöglicht das Navigieren durch diese beiden Kombinationsfelder mit der TAB-Taste.

Pankaj
quelle
13

Ich denke, es gibt hier eine viel einfachere Lösung, ganz oben in Ihrem Steuerelement oder Fenster oder was auch immer, Sie könnten hinzufügen:

KeyboardNavigation.TabNavigation="Cycle"

Dies ignoriert auch automatisch die reduzierten Registerkarten.

AltF4_
quelle
6

Eine andere Alternative, die in der Vergangenheit für mich funktioniert hat, besteht darin, einfach alle expliziten TabIndexAnweisungen zu entfernen und die Steuerelemente die Reihenfolge verwenden zu lassen, in der sie in XAML deklariert sind.

Dies kann natürlich erfordern, dass Sie Ihre Steuerelemente neu anordnen. Dies ist jedoch ein einfacher Vorgang zum Kopieren und Einfügen.

Gustavo Mori
quelle
4
Das Problem ist, dass Sie Steuerelemente in Dingen wie DockPanels nicht einfach neu anordnen können, wenn die Reihenfolge, in der Sie sie hinzufügen, nicht mit der Reihenfolge der Registerkarten übereinstimmt. Betrachten Sie beispielsweise die Docking-Schaltflächen auf der rechten Seite. Sie docken die letzte zuerst, die vorletzte Sekunde usw. an, möchten jedoch, dass die Tabulatorreihenfolge umgekehrt wird. Das ist es, was mich am meisten auslöst. In Zeiten wie diesen vermisse ich die alten VB6-Tage (nicht die Sprache, nur diese Funktion), in denen Sie "Tab-Reihenfolge festlegen" auswählen und einfach durch alle Steuerelemente klicken. Einfach und süß. Frustrierend, dass wir so etwas hier im Jahr 2018 nicht haben.
Mark A. Donohoe
0

Sie können KeyboardNavigation.TabNavigation = "None" verwenden, um das Tabbing für ein bestimmtes Steuerelement vollständig zu überspringen.

user2306815
quelle