2016-04-29 46 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,现在它被解雇了。 –