当用户在带有 AccptsReturn="True" 的 WPF 文本框中按下 ENTER 键时如何避免换行

How to avoid a new line when user presses ENTER key in a WPF TextBox with AccptsReturn="True"

我有一个 WPF C# 文本编辑应用程序,我需要在用户按下 CTRL + ENTER 组合时添加一个新行,并在用户按下 ENTER 键时执行另一个操作。我尝试在 Keydown 事件中使用以下代码,但是当按下 ENTER 时添加该行,而当按下 CTRL + ENTER 时不添加。欢迎任何帮助。谢谢

    private void rtbText_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl))
        {
            switch (e.Key)
            {
                case Key.Enter: break;
            }
        }
        else
        {
            if (e.Key == Key.Enter)
            {
                btnFormat_Click(this, null);
                e.Handled = true;
            }
        } 
    }

您可以使用 PreviewKeydown 事件实现此目的。当我们检测到 Ctrl+Enter 时,我们在文本中添加一个新行并将插入符号移到末尾。

private void rtbText_PreviewKeyDown(object sender, KeyEventArgs e)
{
        if (e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl))
        {
            switch (e.Key)
            {
                case Key.Enter:
                TextBox t = sender as TextBox;
                t.Text += Environment.NewLine;
                t.CaretIndex = t.Text.Length - 1;
                break;
            }
        }
        else
        {
            if (e.Key == Key.Enter)
            {
            btnFormat_Click(this, null);
            e.Handled = true;
            }
        }
}