WPF文本框和空格字符换行
本文关键字:字符 换行 空格 文本 WPF | 更新日期: 2023-09-27 18:01:53
我的观察结果:
在测试具有启用换行的TextBox的WPF应用程序以允许多行文本时,如果我刚开始键入单词,并且到达TextBox的最右侧,则单词和光标将根据键入中最后一个空格/字符分隔符换行到下一行。
如果在第1行键入一个字符,然后按住空格键,则光标会在TextBox中滚动出视图,当光标到达第1行末尾时不会换行到第2行。一旦我键入了空格以外的内容,该字符就会换行并从第2行的开头开始。如果我使用左箭头键向后移动,光标将从第二行消失,并且在第一行的某个时间内不可见,直到它移动过以前键入的所有空格。如果我将光标放在第1行的末尾并键入另一个非空格字符,则该字符通常会换行到第2行,在第2行的前一个字符前面有几个空格。相对于TextBox中的文本,内容将包括所有可见字符加上TextBox视图区域外包含的所有空格字符。
我的问题:
TextBox上是否有我缺少的属性设置,以强制空格字符在到达第1行末尾时换行,而不是滚动出屏幕?
谢谢。
标记
做了一些研究,将更改后的文本上的空格"替换为非中断空格"/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;
}