2011-06-14 6 views
7

मैं पाठ बॉक्स के PreviewLostKeyboardFocus घटना के लिए कोई हैंडलर की है। जब मैं कीबोर्ड (टैब कुंजी) या माउस (फॉर्म पर किसी अन्य टेक्स्टबॉक्स पर क्लिक करके) टेक्स्टबॉक्स को छोड़ देता हूं तो यह आग लग जाता है।क्या WPF टेक्स्टबॉक्स छोड़ने के लिए उपयोगकर्ता कीबोर्ड या माउस का उपयोग करता था?

हैंडलर एक KeyboardFocusChangedEventArgs है, जो एक संपत्ति KeyboardDevice नाम है, जो या तो परिदृश्य में अशक्त नहीं दे रहा है लेता है (मैं यहाँ null लगता है जब माउस का उपयोग उम्मीद कर रहा था)।

प्रश्न: मैं कैसे बता सकता हूं कि उपयोगकर्ता ने WPF टेक्स्टबॉक्स छोड़ने के लिए कीबोर्ड या माउस का उपयोग किया था या नहीं?

+0

क्योंकि कुछ अन्य नियंत्रण [कोड में] फोकस पकड़ लेता है क्या होगा अगर फोकस नियंत्रण छोड़ देता है (http://msdn.microsoft.com/en-us/library/system.windows.uielement.focus.aspx)? – Vlad

+2

नहीं यह बेहतर होगा एक प्रमुख श्रोता की स्थापना की और पता लगाने अगर टैब दबाया गया था के लिए? यदि दबाए गए टैब के अनुसार, आप तदनुसार जवाब दे सकते हैं, अन्यथा मान लें कि उन्होंने माउस द्वारा कुछ अन्य तरीके छोड़ा है। मैं WPF से परिचित नहीं हूं, लेकिन कई यूआई पुस्तकालयों में आप टैब कुंजी को कैप्चर कर सकते हैं, और इसकी क्रिया को ओवरराइड कर सकते हैं। मुझे लगता है कि आप वास्तव में अगले क्षेत्र में जाने के बजाय टेक्स्ट क्षेत्र में एक टैब डालना चाहते हैं। – Kibbee

+0

मैं यहां किब्बी से सहमत हूं: टैब कुंजी के लिए या तो 'इवेंट हैंडलर' या 'माउसओवर' हैंडलर जोड़ने के बारे में, जो कि – Damascus

उत्तर

3

e.KeyboardDevice.GetKeyStates (Key.Tab) (जहां ई प्रकार KeyboardFocusChangedEventArgs की है) की रिपोर्ट:

  • कोई नहीं
  • नीचे (जब माउस फ़ोकस बदलने के लिए इस्तेमाल किया गया था) , टॉगल (जब टेक्स्ट का उपयोग टेक्स्टबॉक्स छोड़ने के लिए किया गया था)

क्या यह आपके लिए काम करेगा?

+0

आज भी मुझे यह विचार था, लेकिन सोचा कि एक समय मुद्दा हो सकता है क्योंकि आपके यहां दो अलग-अलग कार्यक्रम हैं। और एक और टिप्पणी यहाँ एक ही मनाया: यह है कि क्या घटना जबकि कुंजी अभी भी दबाया गया था ट्रिगर किया गया था के आधार पर मामलों के 90% में काम करेगा। मैं उस पर भरोसा नहीं करता। – ygoe

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