2014-06-16 6 views
5

TextBox कैसे अपना ध्यान खो देता है और उपयोगकर्ता Enter आभासी कुंजी स्पर्श करते समय ऑनस्क्रीन कीबोर्ड छुपाता है?टेक्स्टबॉक्स को अपना ध्यान कैसे खोया जाए?

private void TheName_KeyDown(object sender, KeyRoutedEventArgs e) { 
     var tb = sender as TextBox; 
     if (e.Key == Windows.System.VirtualKey.Enter) { 
      // ... tb.LooseTheFocus_PLEASE(); !??? 
     } 
    } 
+3

आप वास्तव में नहीं कर सकता। आपको दूसरे नियंत्रण पर ध्यान केंद्रित करना होगा। – Matthijs

+0

इसे कैसे करें? मैंने यह कोशिश की है। फोकस (विंडोज़.यूआई.एक्सएमएल.फोकसस्टेट.इंटर) - अनदेखा। – Harry

+0

प्रयास करें [मेरे समाधान] [1] के बारे में hidding विंडोज पर टच कीबोर्ड 8. [1]: http://stackoverflow.com/questions/20858141/keyboard-wont-dismiss-even-after- फोकस-चेंज/2 9 124111 # 2 9 124111 –

उत्तर

13
/// <summary> 
    /// Makes virtual keyboard disappear 
    /// </summary> 
    /// <param name="sender"></param> 
    private void LoseFocus(object sender) { 
     var control = sender as Control; 
     var isTabStop = control.IsTabStop; 
     control.IsTabStop = false; 
     control.IsEnabled = false; 
     control.IsEnabled = true; 
     control.IsTabStop = isTabStop; 
    } 

    /// <summary> 
    /// Makes virtual keyboard disappear when user taps enter key 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    private void LooseFocusOnEnter(object sender, KeyRoutedEventArgs e) { 
     if (e.Key == Windows.System.VirtualKey.Enter) { 
      e.Handled = true; LoseFocus(sender); 
     } 
    } 

यह बदसूरत है। लेकिन यह काम करता है। मुख्य भाग IsTabStop संपत्ति है। अगर मैं इसे छूता नहीं हूं - कीबोर्ड दूसरे के अंश के लिए निराश होता है और फिर से दोबारा पहनता है।

1

प्रोग्रामेटिक रूप से नियंत्रण से फ़ोकस को हटाने का कोई तरीका नहीं है।

एक विकल्प फॉर्म पर किसी अन्य नियंत्रण पर ध्यान केंद्रित करना होगा, एक लेबल कहता है जो आपके टेक्स्टबॉक्स में किस प्रकार का टेक्स्ट दर्ज किया जाना चाहिए।

इससे टेक्स्टबॉक्स फोकस खो देता है।

रूप Control.Focus() के बारे में this दस्तावेज में दिखाया गया है:

आप पैरामीटर के रूप में FocusState.Unfocused के साथ इस विधि को फोन करके एक नियंत्रण से फोकस नहीं निकाल सकते। इस मान की अनुमति नहीं है और अपवाद का कारण बनता है। नियंत्रण से फोकस हटाने के लिए, एक अलग नियंत्रण पर ध्यान केंद्रित करें।

फोकस सेट करने के लिए बस Control.Focus(FocusState.Programmatic) का उपयोग करें। किसी भी नियंत्रण करना चाहिए।

+0

काम नहीं करता है। जब मैं लेबल (या किसी अन्य तत्व) पर फ़ोकस सेट करने का प्रयास करता हूं तो कुछ भी नहीं होता है। – Harry

+0

क्षमा करें, मुझे अपना जवाब संपादित करने दें। – Matthijs

+0

मुझे यह कहने से नफरत है, लेकिन मैंने कोशिश की है, और यह काम नहीं करता है। मैंने फोकसस्टेट सेट किया है। प्रोग्रामैटिक - और रेखा को सिर्फ अनदेखा किया गया है। मैंने फोकस() तर्क के लिए हर संभव मूल्य की कोशिश नहीं की है। मैंने पृष्ठ, ग्रिड, टेक्स्टब्लॉक तत्व पर ध्यान केंद्रित करने का प्रयास किया है, यह सिर्फ काम करने से इंकार कर देता है। मैंने कोड कोडाडाउन हैंडलर में रखा है, शायद इसे वहां से नहीं बुलाया जा सकता है? – Harry

4

बस पृष्ठ पर ध्यान केंद्रित करें।

this.Focus(); 
+1

यह WP 8.1 ऐप में काम नहीं करता है। फोकस को एक तर्क की आवश्यकता होती है, लेकिन जो भी मैं प्रदान करता हूं, कोई वर्चुअल कीबोर्ड तब तक रहता है जब तक कि मैं टेक्स्टबॉक्स के बाहर खाली स्थान पर क्लिक नहीं करता। – Harry

+1

ठीक है, अपने टैग को ठीक करें। – Pantelis

+3

http://stackoverflow.com/questions/20858141/keyboard-wont-dismiss-even-after-focus-change – Pantelis

0

UWP क्षुधा में unfocus करने के लिए बस कार्य करें:

private void Input_KeyDown(object sender, KeyRoutedEventArgs e) 
{ 
    if (e.Key == VirtualKey.Enter) 
    { 
     //Do what you want upon enter 
     this.Focus(FocusState.Programmatic); 
    } 
} 
संबंधित मुद्दे