WPF文本框和空格字符换行

本文关键字:字符 换行 空格 文本 WPF | 更新日期: 2023-09-27 18:01:53

我的观察结果:

在测试具有启用换行的TextBox的WPF应用程序以允许多行文本时,如果我刚开始键入单词,并且到达TextBox的最右侧,则单词和光标将根据键入中最后一个空格/字符分隔符换行到下一行。

如果在第1行键入一个字符,然后按住空格键,则光标会在TextBox中滚动出视图,当光标到达第1行末尾时不会换行到第2行。一旦我键入了空格以外的内容,该字符就会换行并从第2行的开头开始。如果我使用左箭头键向后移动,光标将从第二行消失,并且在第一行的某个时间内不可见,直到它移动过以前键入的所有空格。如果我将光标放在第1行的末尾并键入另一个非空格字符,则该字符通常会换行到第2行,在第2行的前一个字符前面有几个空格。相对于TextBox中的文本,内容将包括所有可见字符加上TextBox视图区域外包含的所有空格字符。

我的问题:

TextBox上是否有我缺少的属性设置,以强制空格字符在到达第1行末尾时换行,而不是滚动出屏幕?

谢谢。

标记

WPF文本框和空格字符换行

做了一些研究,将更改后的文本上的空格"替换为非中断空格"/u00a0",将光标保持在文本框的边界内

我只是把它连接起来作为概念验证,这将导致递归调用,所以不要在生产代码中使用它。也许可以使用转换器,或者在数据绑定属性设置器中使用转换器?

    /// <summary>
    ///     Handle textbox on text changed event
    /// </summary>
    private void TextBoxBase_OnTextChanged(object sender, TextChangedEventArgs e)
    {
        // Replace space with non-breaking space
        TestTextBox.Text = TestTextBox.Text.Replace(" ", "'u00a0");
        // Put the cursor at the end of the textbox (updating text sets the cursor at the start)
        TestTextBox.CaretIndex = TestTextBox.Text.Length;
    }