在WPF中处理文本框上的Enter事件时,如何接受Ctrl+Enter作为返回

本文关键字:何接受 Ctrl+Enter 返回 事件 Enter 处理 WPF 文本 | 更新日期: 2023-09-27 18:12:52

我正在制作一个聊天窗口,我想在用户按下文本框上的Enter键时发送消息。但是我还想让用户使用Ctrl+ enter键输入换行符。

问题是当我设置AcceptsReturn=True并且用户按下Enter键时,KeyDown事件在TextBox附加换行符后触发,因此发送的消息将始终在末尾包含换行符。是否有一种方法可以禁用Enter键,同时仍然允许Ctrl+Enter?

我想出了最难看的方法,即按下Enter键时先删除光标前的字母,然后再处理它。但是有没有更好的办法呢?

在WPF中处理文本框上的Enter事件时,如何接受Ctrl+Enter作为返回

我不是100%确定你的要求,所以你可能不得不把这段代码稍微调整一下,但是你应该能够通过将KeyEventArgse.Handled属性设置为false来做你想做的。根据链接页面,这是:

获取或设置一个值,该值指示路由事件在传播路由时的事件处理的当前状态。

在简单的英语中,这只是意味着我们可以阻止它被进一步使用。试试这样做:

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter) // if Enter key is pressed...
    {
        // ... and Ctrl key is NOT... then ignore it
        if (Keyboard.Modifiers != ModifierKeys.Control) e.Handled = true;
    }
}