当我按下Enter键时,如果KeyDown
属性设置为true,则不会触发TextBox
的{{1}}事件。如何在AcceptsReturn
设置为TextBox
AcceptsReturn
时确定何时按下Enter键?
答案 0 :(得分:4)
如果您希望完全禁用新行(如@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;
}
答案 1 :(得分: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 ***
}
答案 2 :(得分:1)
当我按下回车键时,不会触发文本框的按键事件。仅当我将文本框的接受返回属性设置为true时才会发生这种情况。
这是因为如果AcceptsReturn
设置为true,则TextBox
允许换行符,因此当您按Enter键时,它将开始一个新行,并且KeyDown事件不会被取消被辞退了。另外,如果将其设置为false(默认情况下为false),当您按Enter键时,它会使此TextBox
处于输入焦点状态,KeyDown事件可能会被触发。
如何确定何时按下Enter键?
我担心您无法在此方案中使用KeyDown事件来识别Enter键,但您可以在后面的代码中使用TextBox.TextChanged event来获得通知,因为它会在输入时开始新行键是按下的。
答案 3 :(得分:0)
:
<TextBox VerticalAlignment="Top" KeyDown="TextBox_KeyDown"/>
代码背后的:
private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
Debug.WriteLine(e.Key);
}
从输出中,您可以看到Enter已被识别。