UWP 中的 TextBox 未触发 KeyDown 事件
KeyDown Event not fired for TextBox in UWP
当我按下 Enter 键时,如果 AcceptsReturn
属性 设置为真,则不会触发 TextBox
的 KeyDown
事件。如何识别何时为 TextBox
按下 Enter 键,AcceptsReturn
设置为 true
?
在 XAML 中:
<TextBox VerticalAlignment="Top" KeyDown="TextBox_KeyDown"/>
后面的代码:
private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
Debug.WriteLine(e.Key);
}
从输出中可以看出,Enter 被识别了。
When i press enter key, Key Down event for the Text Box is not fired. This happens only when i set Accepts Return property of text Box as true.
这是因为如果AcceptsReturn
设置为true,TextBox
允许换行符,所以当你按下回车键时,它会开始一个新的行,而KeyDown事件不会被辞退了。否则,如果它设置为false(默认为false),当你按下回车键时,它使这个TextBox
处于输入焦点状态,KeyDown事件可以被触发。
How can i identify when the Enter key is pressed ?
恐怕你不能在这种情况下使用 KeyDown 事件来识别 Enter 键,但你可以在后面的代码中使用 TextBox.TextChanged event 来获得通知,因为它会在输入时开始一个新行键被按下。
我试过下面的代码,它对我有用,
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 ***
}
如果您希望完全禁用新行(就像@ruffin 想要的那样),请通过隐藏代码订阅 PreviewKeyDown 事件并将 e.Handled
设置为 true
。
public MyControl()
{
InitializeComponent();
var keyeventHandler = new KeyEventHandler(TextBox_KeyDown);
uiText.AddHandler(PreviewKeyDownEvent, keyeventHandler, handledEventsToo: true);
}
private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Enter)
e.Handled = true;
}
当我按下 Enter 键时,如果 AcceptsReturn
属性 设置为真,则不会触发 TextBox
的 KeyDown
事件。如何识别何时为 TextBox
按下 Enter 键,AcceptsReturn
设置为 true
?
在 XAML 中:
<TextBox VerticalAlignment="Top" KeyDown="TextBox_KeyDown"/>
后面的代码:
private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
Debug.WriteLine(e.Key);
}
从输出中可以看出,Enter 被识别了。
When i press enter key, Key Down event for the Text Box is not fired. This happens only when i set Accepts Return property of text Box as true.
这是因为如果AcceptsReturn
设置为true,TextBox
允许换行符,所以当你按下回车键时,它会开始一个新的行,而KeyDown事件不会被辞退了。否则,如果它设置为false(默认为false),当你按下回车键时,它使这个TextBox
处于输入焦点状态,KeyDown事件可以被触发。
How can i identify when the Enter key is pressed ?
恐怕你不能在这种情况下使用 KeyDown 事件来识别 Enter 键,但你可以在后面的代码中使用 TextBox.TextChanged event 来获得通知,因为它会在输入时开始一个新行键被按下。
我试过下面的代码,它对我有用,
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 ***
}
如果您希望完全禁用新行(就像@ruffin 想要的那样),请通过隐藏代码订阅 PreviewKeyDown 事件并将 e.Handled
设置为 true
。
public MyControl()
{
InitializeComponent();
var keyeventHandler = new KeyEventHandler(TextBox_KeyDown);
uiText.AddHandler(PreviewKeyDownEvent, keyeventHandler, handledEventsToo: true);
}
private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Enter)
e.Handled = true;
}