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?


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.


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


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.


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.