我试图在按下Shift+Enter
时创建一个创建新行的文本框,我们可以在按下Enter
时获取关键字事件
在KeyDown
事件的后端我要注意,如果按下Enter
,则执行某些操作。
if (e.Key.Equals(Key.RightShift))
{
}
这适用于单行。只要我点击AcceptReturn = true
和textwrapping
到wrap
,然后按Enter
新行添加到文本框但event does not fire up.
1}}
我希望新行发生在Shift+Enter
并且Enter
事件应该触发。
任何想法?
答案 0 :(得分:2)
我认为您可能需要处理 PreviewKeyDown 事件。抓住你想要处理的按键组合,处理它,然后设置e.Handled = true
以确保它不会被作为按键事件tunnels & bubbles在其他任何地方处理。
<强> XAML:强>
<TextBox TextWrapping="Wrap" AcceptsReturn="True"
PreviewKeyDown="TextBox_PreviewKeyDown" />
<强>代码隐藏:强>
private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyboardDevice.Modifiers == ModifierKeys.None && e.Key == Key.Enter)
{
e.Handled = true;
// Do your special enter handling here...
}
// Shift+Enter (and any other keys) will be handled as normally...
// ...you'll still get your new line on Shift+Enter
}
注意:如果您希望Enter键仍然添加新行以及作为特殊处理,则只需删除e.Handled = true
行。
答案 1 :(得分:0)
在KeyDown事件上尝试以下操作,应该使用vanilla多行文本框,不需要任何进一步的操作:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (!e.Shift && e.KeyValue == (int)Keys.Enter)
{
e.SuppressKeyPress = true;
// Fire my custom event
}
}