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?


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.


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


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.


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.


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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.