Ustawianie kolejności tabulatorów w WPF

92

Jak ustawić kolejność kart w WPF? Mam ItemsControl z niektórymi elementami rozwiniętymi, a niektórymi zwiniętymi i chciałbym pominąć zwinięte elementy, gdy używam tabulatora.

Jakieś pomysły?

Rzymski
źródło
Proponowana odpowiedź Jessego to droga ...
Román
wydaje się, że jest to zachowanie domyślne?
JonnyRaa,
@ Román, kim jest Jesse?
Stealth Rabbi
1
@Stealth Rabbi: wybrana odpowiedź. Nazwa mogła się zmienić (od 11 lat temu 😆)
Román

Odpowiedzi:

63

Możesz pominąć elementy w sekwencji kart, ustawiając KeyboardNavigation.IsTabStop w elemencie w języku XAML.

KeyboardNavigation.IsTabStop="False"

Możesz skonfigurować wyzwalacz, który przełączałby tę właściwość na podstawie stanu rozwiniętego.

Ukłucie
źródło
1
Możesz także ustawić Focusable = "False", co usuwa go z fokusa klawiatury, a także z kolejności tabulacji.
Geoff Cox
2
@Geoff Zrobiłem to za pomocą kilku przycisków i nie zadziałało, po prostu fyi.
ToastyMallows
Pozwala to na pomijanie formantów, których nie chcesz być częścią porządkowania kart, ale w WPF jest wiele innych problemów. Kolejność tabulacji nie jest hierarchiczna, więc jeśli na ekranie są inne kontrolki, które mają zerową kolejność (co robią domyślnie), to kolejność tabulacji po prostu nie zadziała.
Christian Findlay
90

Jeśli chcesz jawnie ustawić kolejność tabulatorów dla elementów w swoim formularzu, powinna pomóc następująca załączona właściwość:

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

Mówię „powinien pomóc”, ponieważ nie uważam go za bardzo niezawodny, chociaż prawdopodobnie muszę przeczytać więcej o tym, jak ma być używany. Publikuję tylko tę niedopracowaną odpowiedź, ponieważ nikt inny nie wspomniał o tej właściwości.


Zwróć uwagę, że w Win RT właściwość jest just TabIndex="0".

Drew Noakes
źródło
11
Sztuczka polega na użyciu TabIndex z różnymi wartościami KeyboardNavigation.TabNavigation w elemencie nadrzędnym. Najczęściej używam TabNavigation „Lokalna”. :)
Greg D
Musiałem dodać to do każdej z moich kontrolek, zamiast po prostu dodawać je do różnych StackPanels, które obsługują wspomniane kontrolki.
DJ van Wyk
Uważam, że ustawienie <DockPanel Panel.ZIndex="2">pomaga zamówić punkt wejścia do paneli najwyższego poziomu.
avenmore
25

<Control KeyboardNavigation.TabIndex="0" ... /> Działa doskonale ... Na przykład-

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

Pozwoli ci poruszać się po tych dwóch polach kombi za pomocą klawisza TAB.

Pankaj
źródło
13

Myślę, że jest tutaj znacznie łatwiejsze rozwiązanie, u góry w twojej kontroli lub oknie lub cokolwiek innego, możesz dodać:

KeyboardNavigation.TabNavigation="Cycle"

To również automatycznie ignoruje zwinięte karty.

AltF4_
źródło
6

Inną alternatywą, która działała dla mnie w przeszłości, jest po prostu usunięcie wszystkich jawnych TabIndexinstrukcji i pozwolenie kontrolkom na użycie kolejności, w jakiej są zadeklarowane w XAML, aby działały magicznie.

Może to oczywiście wymagać zmiany kolejności elementów sterujących. Ale to jest prosta operacja kopiuj-wklej.

Gustavo Mori
źródło
5
Problem polega na tym, że nie można po prostu zmienić kolejności formantów w elementach takich jak DockPanels, gdzie kolejność ich dodawania nie jest zgodna z kolejnością tabulatorów. Na przykład rozważ zadokowanie przycisków po prawej stronie. Najpierw zadokujesz ostatnią, przedostatnią sekundę itd., Ale chcesz, aby kolejność tabulacji została odwrócona. To mnie najbardziej denerwuje. W takich momentach tęsknię za starymi dniami VB6 (nie za język, tylko za tę funkcję), w których wybierasz `` Ustaw kolejność zakładek '' i po prostu klikasz wszystkie kontrolki. Proste i słodkie. Frustrujące, że nie mamy czegoś takiego tutaj w 2018 roku.
Mark A. Donohoe
1
@Mark lub 2020 :). Porządkowanie kart w WPF jest niesamowicie skomplikowane, za każdym razem, gdy potrzebuję niestandardowego zamawiania, muszę spędzić cały dzień zmagając się z jego nieprzewidywalnością. W Winforms było to przyziemne zadanie, które zajmowało kilka minut na okno.
bokibeg
0

Możesz użyć KeyboardNavigation.TabNavigation = "None", aby całkowicie pominąć tabulację w celu uzyskania określonej kontroli.

user2306815
źródło