2012-08-27 17 views
15

मैं सी # में विंडोज 8 के लिए अपना ऐप विकसित कर रहा हूं, और एक बहुत ही कष्टप्रद बात यह है कि टच कीबोर्ड कभी-कभी स्क्रीन पर रहता है, भले ही सभी टेक्स्टबॉक्स फोकस खो चुके हों।विंडोज 8 - टच कीबोर्ड को कैसे खारिज करें?

मैंने लेख keyboard dismissal logic white paper पढ़ा है, जो बताता है कि नियंत्रण से नियंत्रण में स्विच करते समय, कीबोर्ड कीबोर्ड पर इनपुट स्वीकार नहीं कर सकता है, भले ही कीबोर्ड चालू रह सके। यह मेरा मामला होगा क्योंकि मेरी सभी सामग्री ग्रिड व्यू या लिस्ट व्यू में होस्ट की जाती है। जब उपयोगकर्ता स्क्रीन पर किसी भी आइटम पर क्लिक करता है, तो टैप इन नियंत्रणों पर उतरेगा। यह बहुत परेशान है क्योंकि कीबोर्ड स्क्रीन का आधा हिस्सा लेता है और कीबोर्ड बंद करने का कोई तरीका नहीं है।

मैंने टेक्स्टबॉक्स को अक्षम करने की कोशिश की है और इससे प्रभावित नहीं हुआ है। कुंजीपटल को हटाने का एकमात्र तरीका एक बटन पर फ़ोकस सेट करना है, जो बेहद हैकी है।

मैंने सोचा कि मुझे "ऑटोमेशन पीयर" के साथ कुछ करने की ज़रूरत है, लेकिन मुझे स्पष्ट नहीं है कि वास्तव में क्या करना है। क्या इस व्यवहार को ओवरराइड करने का कोई तरीका है?

संपादित करें: मैंने इसे समझ लिया। लक्ष्य whitepaper में सूचीबद्ध नहीं है ग्रिड व्यू और ग्रिड व्यू आइटम के नियंत्रण प्रकार में बदलना है।

public class KeyboardUnfocusableGridView : GridView 
{ 
    private class KeyboardUnfocusableGridViewAutomationPeer : GridViewAutomationPeer 
    { 
     public KeyboardUnfocusableGridViewAutomationPeer(GridView owner) 
      : base(owner) 
     { 
     } 

     protected override AutomationControlType GetAutomationControlTypeCore() 
     { 
      return AutomationControlType.Custom; 
     } 

    } 

    private class KeyboardUnfocusableGridViewItemAutomationPeer : GridViewItemAutomationPeer 
    { 
     public KeyboardUnfocusableGridViewItemAutomationPeer(GridViewItem owner) 
      : base(owner) 
     { } 

     protected override AutomationControlType GetAutomationControlTypeCore() 
     { 
      return AutomationControlType.Custom; 
     } 

    } 

    private class KeyboardUnfocusableGridViewItem : GridViewItem 
    { 
     protected override AutomationPeer OnCreateAutomationPeer() 
     { 
      var baseItem = base.OnCreateAutomationPeer(); 
      return new KeyboardUnfocusableGridViewItemAutomationPeer(this); 
     } 


    } 

    protected override AutomationPeer OnCreateAutomationPeer() 
    { 
     var baseItem = base.OnCreateAutomationPeer(); 
     return new KeyboardUnfocusableGridViewAutomationPeer(this); 
    } 

    protected override Windows.UI.Xaml.DependencyObject GetContainerForItemOverride() 
    { 
     return new KeyboardUnfocusableGridViewItem(); 
    } 
} 

यह दुर्भाग्यपूर्ण है कि मैं एक साधारण बात करने के लिए इतना कोड लिखने की जरूरत है: यहाँ ग्रिड कि मुझे लगता है कि मुझे कीबोर्ड ख़ारिज करने की अनुमति दी किया कोड है। यह निश्चित रूप से इष्टतम नहीं है क्योंकि मुझे ItemsControl में से प्रत्येक के लिए ऐसा करने की आवश्यकता होगी जिसे मुझे उपयोग करने की आवश्यकता है।

+0

तो अपनी सभी सामग्री को एक GridView या ListView में है, तुम सब करने की जरूरत है IsHitTestVisible संपत्ति सेट कर दिया जाता झूठी और आपके टेक्स्ट बॉक्स फोकस स्वीकार करने में सक्षम नहीं होंगे, इसलिए कीबोर्ड पॉप अप नहीं होगा। दुर्भाग्यवश, आप स्क्रॉलिंग भी खो देंगे। बस एक एफवाईआई ... –

+0

ग्रेट समाधान, मैं इस मुद्दे के साथ निराश था :)। और वही तकनीक ListView के लिए भी काम करती है। –

+0

क्या आप कृपया अपना समाधान नीचे दिए गए उत्तर में ले जा सकते हैं ताकि हम इसे अनुत्तरित सूची से प्राप्त कर सकें? धन्यवाद। –

उत्तर

3

आपको जो करना है वह किसी भी नियंत्रण पर ध्यान केंद्रित करना है जो पाठ प्रविष्टि को स्वीकार नहीं करता है। हालांकि, ध्यान रखें कि यदि उपयोगकर्ता ने कीबोर्ड को मैन्युअल रूप से दिखाया है (जैसा कि टेक्स्टबॉक्स को फोकस प्राप्त होता है तो इसका स्वचालित रूप से विरोध होता है) तो कीबोर्ड खुला रहेगा। अधिक जानकारी के लिए ऑन-स्क्रीन कीबोर्ड के बारे में यह वास्तव में अच्छा धागा

चेक आउट:

http://social.msdn.microsoft.com/Forums/pl/winappswithcsharp/thread/3c227262-1d2c-4382-9c50-5b71d2b5d823

+0

यह काम नहीं करता क्योंकि मेरे सभी नियंत्रण ग्रिड व्यू या लिस्ट व्यू में हैं। डिफ़ॉल्ट रूप से, ग्रिड व्यू या एक सूची दृश्य में नियंत्रण पर फ़ोकस सेट करना कुंजीपटल को खारिज नहीं करता है। मुझे लगता है कि मैंने एक रास्ता तय किया है, जिसे मैं इसे जल्द ही यहां पोस्ट कर रहा हूं। – thisnick

+8

जल्द ही परिभाषित करें? – Spiked3

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