2011-05-08 60 views
5

我有一個文本框在XAML:Windows Phone 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; 
    } 

當我按下模擬器鍵盤上的退格鍵,該事件被忽略。如果我按任何其他按鈕,它會被觸發。另外,當我在KeyUp事件中使用相同的事件主體時,退格鍵會觸發它。

如何跟蹤KeyDown事件的退格鍵何時被按下?爲什麼按退格鍵不會觸發KeyDown事件?

謝謝。

回答

6

見關鍵枚舉的退格鍵由TextBox控件內部處理。該控件將採用退格事件並刪除一封信,不會將事件冒泡到事件中。這是設計。您會注意到,如果文本框中沒有字母,則該事件會冒泡。爲了解決此問題,您可以使用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 2011-05-08 18:49:22

+0

這工作,我只需要把textBox1.AddHandler ...語句到頁面構造函數中,但事件似乎已被觸發兩次。雖然,沒關係,謝謝你關於Backspace鍵的有趣信息,除非文本框是空的,否則我不喜歡冒泡,我喜歡這種行爲。對於那些仍然需要控制每個退格按鍵的人來說,KeyUp事件正好適用於此目的。 – Eugene 2011-05-09 13:04:47