2016-04-29 43 views

回答

3

我嘗試下面的代碼,它的工作對我來說,

var textBox = new TextBox(); 
KeyEventHandler keyeventHandler = new KeyEventHandler(textBox_KeyDown); 

textBox.AddHandler(TextBox.KeyDownEvent, keyeventHandler, true); 

private void textBox_KeyDown(object sender, KeyEventArgs e) 
{ 
*** now Enter Key gets fired eventhough when i set AcceptsReturn as True *** 
} 
+0

看起來像'.AddHandler'因爲[第三個參數,'handledEventsToo'](https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.uielement#Windows_UI_Xaml_UIElement_AddHandler_) MSDN說:「*不要經常要求重新處理路由事件,因爲它會干擾Windows運行時事件系統的控制合成設計。」*其他缺點:關閉'Enter'太遲了。在這裏設置'e.Handled = true;'不會停止TextBox中的輸入。但另外一個很好的答案;這工作。 – ruffin

0

在XAML:

<TextBox VerticalAlignment="Top" KeyDown="TextBox_KeyDown"/> 

在後面的代碼:從輸出

private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e) 
    { 
     Debug.WriteLine(e.Key); 
    } 

,你可以看到,輸入被識別。

+2

對不起,如果我按回車鍵,不會觸發KeyDown事件。 TextBox句柄當按下Enter鍵時。如果我沒有將TextBox的Accepts Returns設置爲true,那麼當我按Enter鍵時會觸發Key down事件。但是,如果我將AcceptsReturn設置爲true,那麼KeyDown事件不會被解僱 –

1

當我按Enter鍵時,文本框的按鍵事件未被觸發。只有當我將文本框的Accepts Return屬性設置爲true時纔會發生這種情況。

這是因爲如果AcceptsReturn設置爲true,則TextBox允許換行字符,所以當你按回車鍵,就會啓動一個新的生產線,並KeyDown事件不會被解僱。另外,如果設置爲false(默認情況下爲false),那麼當您按Enter鍵時,它會使此TextBox處於輸入焦點狀態,KeyDown事件可能會被觸發。

如何識別何時按下Enter鍵?

恐怕你不能用KeyDown事件,以確定在這種情況下回車鍵,但你可以在後面的代碼得到通知使用TextBox.TextChanged event由於按下回車鍵時,它會開始一個新行。

+0

嗨@Grace,感謝您的回答,但我找到了解決方案。我在這個場景中使用了Handler,現在它被解僱了。 –