2012-10-03 19 views
2

在我的Windows應用程序中,我通過將AcceptsReturn屬性設置爲True來製作多行文本框。它讓用戶在文本框中輸入多行文本。另外,我想每次都做一些事情,在文本框中按下Return/Enter鍵。事件處理程序代碼如下...如果設置爲true,AcceptsReturn將禁用多行文本框中的Key.Return檢測?

private void TextBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Return) 

     // do something here 
} 

看來,如果AcceptsReturn被設置爲True,返回鍵被按下,這個事件處理函數不是在所有調用。任何其他按鍵被正確檢測到。如果AcceptsReturn沒有設置爲True並且按下Return鍵,則調用事件處理程序並檢測返回鍵按下就好。問題在於按下Return鍵不會將用戶推到文本框中的新行(如預期的那樣)。 所以,我想要返回鍵按正確推進用戶到文本框中的新行,以及我希望能夠檢測到返回鍵按下。我的方法錯了嗎?有一個更好的方法嗎?

+0

您是否嘗試過PreviewKeyDown事件? – LPL

+0

工作!:D謝謝! –

回答

9

KeyDown冒泡事件,這意味着它首先在源代碼管理(TextBox)上提出,然後在父級上,然後在父級的父級上,等等,直到它被處理。當您將AcceptsReturn設置爲true時,控件會處理返回鍵,這樣事件就不會冒泡。在這種情況下,您可以使用隧道版本的事件:PreviewKeyDown,它在控件的每個祖先從頂部到底部引發,然後到達源控件。

請參閱Routing Strategies上的MSDN

相關問題