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