WPF文本框和空格字符包装

时间:2015-07-08 17:26:17

标签: c# wpf

我的观察结果:

在使用Wrap启用TextBox测试WPF应用程序以允许多行文本时,如果我刚开始输入单词并且我到达TextBox的最右侧,则单词和光标将基于以下内容换行到下一行我输入的最后一个空格/中断字符。

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

我的问题:

TextBox上是否有一个属性设置,我强加空格字符一旦到达第一行的末尾而不是滚动离开屏幕,就强制将第二行包裹起来?

感谢。

标记

1 个答案:

答案 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;
    }
相关问题