我的观察:
在使用Wrap启用TextBox测试WPF应用程序以允许多行文本时,如果我刚开始输入单词并且我到达TextBox的最右侧,则单词和光标将根据最后一个空格换行到下一行/打字时打破了字符.
如果在第一行我键入一个字符,然后按住空格键,光标在TextBox中滚动出视图,当光标到达第一行的末尾时,光标不会换行到第二行.一旦我输入了空格以外的其他内容,该字符就会在第二行的开头包装并开始.如果我使用向左箭头键向后移动,光标将从第2行消失,并且在第1行的某个时间将不可见,直到它移动到之前键入的所有空格.如果我将光标放在第一行的末尾并键入另一个非空格字符,那么该字符通常会包裹到第二行,第二行的前一个字符前面有几个空格.相对于TextBox中的文本,内容将包括所有可见字符以及TextBox视图区域外部包含的所有空格字符.
我的问题:
我错过了TextBox上的属性设置,以便在第二行到达第一行的末尾而不是滚动屏幕时强制空格字符包裹第二行吗?
谢谢.
标记
做了一些研究,并在更改的文本上用不间断空格“/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;
}
Run Code Online (Sandbox Code Playgroud)