2011-05-08 11 views
5

मैं XAML में एक पाठ बॉक्स है:विंडोज फोन 7 हैंडलिंग बैकस्पेस KeyDown घटना

<TextBox Text="blah" 
     Name="blah" 
     LostFocus="blah_OnLostFocus" 
     KeyDown="blah_OnKeyDown"/> 

.cs फ़ाइल निम्न इवेंट की घोषणा की है:

private void blah_OnKeyDown(object sender, KeyEventArgs e) 
    { 
     TextBox t = sender as TextBox; 
     int i = 0; 
     if(e.Key == Key.Delete) 
      i = 1; 
    } 

जब मैं एमुलेटर के कीबोर्ड पर बैकस्पेस कुंजी दबाएँ , घटना को नजरअंदाज कर दिया जाता है। अगर मैं कोई अन्य बटन दबाता हूं, तो यह ट्रिगर होता है। साथ ही, जब मैं कीप इवेंट के लिए एक ही ईवेंट बॉडी का उपयोग करता हूं, बैकस्पेस कुंजी इसे ट्रिगर करता है।

कुंजीडाउन ईवेंट के लिए बैकस्पेस कुंजी दबाए जाने पर मैं कैसे ट्रैक करूं? बैकस्पेस कुंजी दबाकर क्यों कुंजीडाउन ईवेंट ट्रिगर नहीं करता है?

धन्यवाद।

उत्तर

6

पर कुंजी गणन देखें बैकस्पेस बटन पाठ बॉक्स नियंत्रण द्वारा आंतरिक रूप से नियंत्रित किया जाता है की जरूरत है। नियंत्रण बैकस्पेस ईवेंट लेगा और एक पत्र हटा देगा और घटना को आपके ईवेंट में बुलबुला नहीं करेगा। यह डिजाइन द्वारा है। आप देखेंगे कि यदि टेक्स्टबॉक्स में कोई अक्षर नहीं है, तो ईवेंट बुलबुला हुआ है। इस के आसपास पहुंचने के लिए, आप घटना को संभालने के लिए AddHandler का उपयोग कर सकते हैं। ऐसा करने का प्रयास करें:

//Handle the mainpage loaded event and add the handler to the textbox 
void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    textBox1.AddHandler(TextBox.KeyDownEvent, new KeyEventHandler(blah_KeyDown), true); 
} 

फिर इस के लिए अपने Key_Down ईवेंट हैंडलर बदलने के लिए:

private void blah_OnKeyDown(object sender, KeyEventArgs e) 
{ 
    TextBox t = sender as TextBox; 
    int i = 0; 
    if(e.Key == Key.Back) 
      i = 1; 
} 

कि पाठ बॉक्स होना चाहिए आंतरिक रूप से घटना को संभालने, बल्कि अपने OnKeyDown घटना कहते हैं।

+0

इस उत्तर के विस्तार के रूप में, इस पोस्ट को Silverlght मंचों पर देखें http://forums.silverlight.net/forums/p/83981/217568.aspx – Stuart

+0

यह काम करता है, मुझे केवल टेक्स्टबॉक्स 1 को जोड़ना पड़ा था। एडहैंडलर ... कथन पेज कन्स्ट्रक्टर में, लेकिन तब घटना दो बार ट्रिगर हुई थी। हालांकि यह ठीक है, बैकस्पेस कुंजी के बारे में जानकारी के दिलचस्प टुकड़े के लिए धन्यवाद, जब तक कि टेक्स्टबॉक्स खाली न हो जाए, मुझे वह व्यवहार पसंद नहीं है। उन लोगों के लिए जिन्हें अभी भी प्रत्येक बैकस्पेस कुंजी प्रेस को नियंत्रित करने की आवश्यकता है, KeyUp ईवेंट उस उद्देश्य के लिए ठीक काम कर रहा है। – Eugene

1

बैकस्पेस का पता लगाने के लिए, आप का उपयोग करने के Key.Back बल्कि Key.Delete से

http://msdn.microsoft.com/en-us/library/system.windows.input.key(v=VS.95).aspx

+0

जब मैं एमुलेटर के कीबोर्ड पर बैकस्पेस कुंजी दबाता हूं, तो ईवेंट को अनदेखा किया जाता है। अगर मैं कोई अन्य बटन दबाता हूं, तो यह ट्रिगर होता है। – Eugene