WPF में टैब ऑर्डर सेट करना


92

मैं WPF में टैब ऑर्डरिंग कैसे सेट करूँ? मेरे पास कुछ आइटम्स हैं जिनमें कुछ आइटम्स विस्तारित हैं और कुछ ढह गए हैं और जब मैं टैब कर रहा हूं तो ढह गए लोगों को छोड़ना चाहूंगा।

कोई विचार?


जेसी के प्रस्तावित उत्तर में जाने का रास्ता है ...
रोमेन डिक

यह डिफ़ॉल्ट व्यवहार प्रतीत होता है?
जोनिरा

@ रोमन कौन जेसी है?
चुपके रब्बी

1
@ चुपके रब्बी: चयनित जवाब। नाम बदल गया हो सकता है (11 साल पहले से might)
रोमन

जवाबों:


63

आप XAML में तत्व पर KeyboardNavigation.IsTabStop सेट करके टैब अनुक्रम में तत्वों को छोड़ सकते हैं ।

KeyboardNavigation.IsTabStop="False"

आप एक ट्रिगर सेटअप कर सकते हैं जो विस्तारित स्थिति के आधार पर इस संपत्ति को टॉगल करेगा।


1
आप फोकस करने योग्य = "गलत" भी हो सकते हैं जो इसे कीबोर्ड फोकस के साथ-साथ टैब ऑर्डर से भी हटा देता है।
ज्यॉफ कॉक्स

2
@ मैं यह बटन के एक समूह के साथ किया था और यह काम नहीं किया, बस fyi।
toastyMallows

यह उन नियंत्रणों को लंघन करने की अनुमति देता है जो आप टैब ऑर्डरिंग का हिस्सा नहीं बनना चाहते हैं, लेकिन WPF में बहुत सी अन्य समस्याएं हैं। टैब ऑर्डरिंग पदानुक्रमित नहीं है, इसलिए यदि स्क्रीन पर अन्य नियंत्रण हैं जिनका शून्य ऑर्डर है (जो वे डिफ़ॉल्ट रूप से करते हैं) तो टैब ऑर्डरिंग बस काम नहीं करेगा।
क्रिश्चियन फिंडेल

90

यदि आप अपने फॉर्म में तत्वों के लिए टैब ऑर्डर को स्पष्ट रूप से सेट करना चाहते हैं, तो निम्नलिखित संलग्न संपत्ति की मदद करना है:

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

मैं कहता हूं कि "मुझे मदद करना है" क्योंकि मुझे यह बहुत विश्वसनीय नहीं लगा है, हालांकि मुझे शायद इसके बारे में अधिक पढ़ने की आवश्यकता है कि इसका उपयोग कैसे किया जाए। मैं केवल इस आधे बेक्ड उत्तर को पोस्ट करता हूं क्योंकि किसी और ने इस संपत्ति का उल्लेख नहीं किया है।


ध्यान दें कि विन आरटी में, संपत्ति बस है TabIndex="0"


11
अभिभावक तत्व में KeyboardNavigation.TabNavigation के विभिन्न मूल्यों के साथ TabIndex का उपयोग करने के लिए चाल है। मैं खुद को "स्थानीय" TabNavigation का सबसे अधिक बार उपयोग करता हूं। :)
ग्रेग डी

मुझे इसे अपने प्रत्येक नियंत्रण में जोड़ना था, इसके बजाय उन्हें अलग-अलग स्टैकपैनल में जोड़ना था जो मेजबान ने कहा कि नियंत्रण।
डीजे वैन व्याक

मुझे लगता है कि सेटिंग <DockPanel Panel.ZIndex="2">से शीर्ष स्तर के पैनलों के प्रवेश बिंदु को ऑर्डर करने में मदद मिलती है।
एवेंमोर नोव

25

<Control KeyboardNavigation.TabIndex="0" ... /> पूरी तरह से ठीक काम करता है ... उदाहरण के लिए-

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

आपको TAB कुंजी का उपयोग करके इन दो कॉम्बो बक्से के माध्यम से नेविगेट करने की अनुमति देगा।


13

मुझे लगता है कि आपके नियंत्रण या खिड़की या जो कुछ भी आप जोड़ सकते हैं, उसके शीर्ष पर, यहां बहुत आसान समाधान है:

KeyboardNavigation.TabNavigation="Cycle"

यह भी स्वचालित टैब ढह टैब की अनदेखी करता है।


6

एक अन्य विकल्प जो मेरे लिए अतीत में काम कर चुका है, वह है बस सभी को स्पष्ट करना TabIndex कथनों को , और नियंत्रणों को उस क्रम का उपयोग करने देना जो वे XAML में घोषित किए गए हैं अपने जादू का काम करते हैं।

यह, निश्चित रूप से, आपको अपने नियंत्रणों को फिर से करने की आवश्यकता हो सकती है। लेकिन यह एक साधारण कॉपी-पेस्ट ऑपरेशन है।


5
समस्या यह है कि आप केवल DockPanels जैसी चीजों में नियंत्रण को फिर से नियंत्रित नहीं कर सकते हैं जहां आप उन्हें जोड़ने वाले आदेश को टैब क्रम से मेल नहीं खाते हैं। उदाहरण के लिए, दाईं ओर डॉकिंग बटन पर विचार करें। आप पिछले एक पहले, दूसरे से अंतिम सेकंड आदि को डॉक करते हैं, लेकिन आप चाहते हैं कि टैब ऑर्डर उलट हो। यही मेरी सबसे अधिक यात्राएँ हैं। इस तरह टाइम्स मैं पुराने VB6 दिनों को याद करता हूं (भाषा को नहीं, सिर्फ इस सुविधा को) जहां आप 'सेट टैब ऑर्डर' चुनते हैं और अपने सभी नियंत्रणों के माध्यम से क्लिक करते हैं। सरल और मीठा। 2018 में हमारे यहाँ ऐसा कुछ भी नहीं होने के कारण
मार्क ए। डोनोहे

1
@ मर्क या 2020 :)। WPF में टैब ऑर्डर करना बहुत जटिल है, जब भी मुझे कस्टम ऑर्डरिंग की आवश्यकता होती है मुझे पूरे दिन कुश्ती को अपनी अप्रत्याशितता के साथ बिताना चाहिए। Winforms में यह एक सांसारिक कार्य था जो प्रति मिनट कुछ विंडो लेता है।
बोकिबेग

0

आप विशिष्ट नियंत्रण के लिए टैबिंग को पूरी तरह से छोड़ने के लिए KeyboardNavigation.TabNavigation = "कोई नहीं" का उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.