WPF'de sekme sırasını ayarlama


92

WPF'de sekme sırasını nasıl ayarlayabilirim? Bazı öğeleri genişletilmiş ve bazıları daraltılmış bir ItemsControl'üm var ve sekme yaparken daraltılmış olanları atlamak istiyorum.

Herhangi bir fikir?


Jesse'nin önerdiği cevap gitmenin yolu ...
Román

bu varsayılan davranış gibi görünüyor?
JonnyRaa

@ Román Jesse kimdir?
Gizli Haham

1
@Stealth Rabbi: seçilen cevap. İsim değişmiş olabilir (11 yıl öncesinden 😆)
Román

Yanıtlar:


63

XAML öğesinde KeyboardNavigation.IsTabStop ayarlayarak sekme sırasındaki öğeleri atlayabilirsiniz .

KeyboardNavigation.IsTabStop="False"

Bu özelliği genişletilmiş duruma göre değiştirecek bir tetikleyici ayarlayabilirsiniz.


1
Ayrıca, onu Klavye odağından ve sekme sırasından kaldıran Focusable = "False" olabilir.
Geoff Cox

2
@Geoff Bunu bir sürü düğme ile yaptım ve işe yaramadı, sadece fyi.
ToastyMallows

Bu, sekme sıralamasının bir parçası olmasını istemediğiniz kontrollerin atlanmasına izin verir, ancak WPF'de birçok başka sorun vardır. Sekme sıralamaları hiyerarşik değildir, bu nedenle ekranda sıfır sıralaması olan (varsayılan olarak yaptıkları) başka kontroller varsa sekme sıralaması çalışmayacaktır.
Christian Findlay

90

Formunuzdaki öğeler için sekme sıralamasını açıkça ayarlamak istiyorsanız, aşağıdaki ekli özelliğin yardımcı olması beklenir:

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

Çok güvenilir bulmadığım için "yardım etmeliyim" diyorum, ancak muhtemelen nasıl kullanılması gerektiği hakkında daha fazla okumam gerekiyor. Ben sadece bu yarım pişmiş cevabı gönderiyorum çünkü kimse bu özellikten bahsetmedi.


Win RT'de özelliğin adil olduğunu unutmayın TabIndex="0".


11
İşin püf noktası, ana öğede çeşitli KeyboardNavigation.TabNavigation değerleri ile TabIndex kullanmaktır. Kendimi en sık "Yerel" TabNavigation kullanırken buluyorum. :)
Greg D

Kontrolleri barındıran farklı StackPanels'e eklemek yerine, bunu kontrollerimin her birine eklemek zorunda kaldım.
DJ van Wyk

Ben ayar bulmak <DockPanel Panel.ZIndex="2">üst düzey panellerin sipariş giriş noktasına yardımcı olur.
avenmore

25

<Control KeyboardNavigation.TabIndex="0" ... /> Mükemmel çalışıyor ... Örneğin-

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

SEKME tuşunu kullanarak bu iki birleşik giriş kutuları arasında gezinmenize izin verecektir.


13

Bence burada çok daha kolay bir çözüm var, kontrolünüzün veya pencerenizin tepesinde veya her neyse, ekleyebilirsiniz:

KeyboardNavigation.TabNavigation="Cycle"

Bu aynı zamanda otomatik olarak daraltılmış sekmeleri yok sayar.


6

Geçmişte benim için işe yarayan bir başka alternatif, tüm açık TabIndex ifadeleri ve kontrollerin XAML'de bildirildikleri sırayı kullanmalarına izin vermektir.

Bu, elbette, kontrollerinizi yeniden düzenlemenizi gerektirebilir. Ancak bu basit bir kopyala-yapıştır işlemidir.


5
Sorun şu ki, eklediğiniz sıranın sekme sırasına uymadığı DockPanels gibi şeylerde denetimleri yeniden sıralayamazsınız. Örneğin, sağdaki yerleştirme düğmelerini düşünün. Sonuncuyu önce, ikinciyi son saniyeye vb. Sabitlersiniz, ancak sekme sırasının tersine çevrilmesini istersiniz. Beni en çok heyecanlandıran şey bu. Bunun gibi zamanlarda eski VB6 günlerini (dili değil, sadece bu özelliği) özlüyorum, burada "Sekme sırasını ayarla" yı seçiyorsunuz ve tüm kontrollerinize tıklamanız yeterli. Basit ve tatlı. Sinir bozucu, burada 2018'de böyle bir şeye sahip değiliz.
Mark A. Donohoe

1
@Mark veya 2020 :). WPF'de sekme sıralaması çılgınca karmaşıktır, ne zaman özel siparişe ihtiyacım olursa olsun, tüm günü öngörülemezliği ile güreşerek geçirmeliyim. Winforms'ta bu, pencere başına birkaç dakika süren sıradan bir görevdi.
bokibeg

0

Belirli bir kontrol için Sekmeyi tamamen atlamak için KeyboardNavigation.TabNavigation = "None" kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.