2009-04-30 14 views
8

क्या कोई मुझे बता सकता है कि एक WPF एप्लिकेशन में सभी यूआई तत्व टैब स्टॉप के माध्यम से प्रोग्रामेटिक रूप से नेविगेट कैसे करें? मैं पहले टैब स्टॉप से ​​संबंधित तत्व को स्नीफ करना शुरू करना चाहता हूं, अगले टैब स्टॉप पर जाएं, इसी तत्व को स्नीफ करें, और तब तक जब तक कि मैं अंतिम टैब स्टॉप तक नहीं पहुंच जाता।WPF UI तत्व टैब प्रोग्रामेटिक रूप से नेविगेट कैसे करें?

धन्यवाद, - माइक

उत्तर

27

आप है कि MoveFocus का उपयोग कर के रूप में इस MSDN लेख जो फोकस के बारे में सब कुछ बताते हैं में दिखाया गया है: Focus Overview

यहां कुछ केंद्रित तत्व प्राप्त करने के लिए कुछ नमूना कोड है (इसे उस लेख से प्राप्त किया गया है, थोड़ा संशोधित)।

// MoveFocus takes a TraversalRequest as its argument. 
TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next); 

// Gets the element with keyboard focus. 
UIElement elementWithFocus = Keyboard.FocusedElement as UIElement; 

// Change keyboard focus. 
if (elementWithFocus != null) 
{ 
    elementWithFocus.MoveFocus(request); 
} 
+0

genial, बहुत बहुत धन्यवाद! – lamarmora

1

आप इसे मूवफोकस कॉल के साथ कर सकते हैं। आप फोकसमेनर के माध्यम से वर्तमान में केंद्रित आइटम प्राप्त कर सकते हैं। निम्न कोड विंडो में सभी ऑब्जेक्ट्स को फिर से चालू करेगा और उन्हें एक सूची में जोड़ देगा। ध्यान दें कि यह ध्यान केंद्रित करके विंडो को भौतिक रूप से संशोधित करेगा। यदि विंडो सक्रिय नहीं है तो संभवतः कोड काम नहीं करेगा।

// Select the first element in the window 
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.First)); 

TraversalRequest next = new TraversalRequest(FocusNavigationDirection.Next); 
List<IInputElement> elements = new List<IInputElement>(); 

// Get the current element. 
UIElement currentElement = FocusManager.GetFocusedElement(this) as UIElement; 
while (currentElement != null) 
{ 
    elements.Add(currentElement); 

    // Get the next element. 
    currentElement.MoveFocus(next); 
    currentElement = FocusManager.GetFocusedElement(this) as UIElement; 

    // If we looped (If that is possible), exit. 
    if (elements[0] == currentElement) 
     break; 
} 
+0

उपरोक्त कोड मेरी WPF विंडो पर काम नहीं करता है। सूची खाली होने के समाप्त होता है। उपरोक्त पहला GetFocusedElement() कॉल शून्य लौटाता है। मैं सहमत हूं कि यह कोड दस्तावेज़ों से बिल्कुल मेल खाता है, लेकिन दुर्भाग्य से यह मेरे लिए काम नहीं करता है। मैं समझने के लिए खुदाई कर रहा हूँ क्यों। –

+1

आप कोड कहां कॉल करते हैं? ध्यान दें कि खिड़की सक्रिय होनी चाहिए ताकि कन्स्ट्रक्टर निश्चित रूप से बाहर हो। ऑनलोड काम कर सकता है, मैंने सक्रिय इस्तेमाल किया जिसे हर बार जब आप विंडो सक्रिय करते हैं तो कहा जाता है। –

संबंधित मुद्दे