【问题标题】:WPF Textbox and space character wrappingWPF 文本框和空格字符换行
【发布时间】:2015-07-08 17:26:16
【问题描述】:

我的观察:

在测试启用了 Wrap 的 TextBox 以允许多行文本的 WPF 应用程序时,如果我刚开始输入单词并到达 TextBox 的最右侧,单词和光标会根据我打字时的最后一个空格/换行符。

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

我的问题:

TextBox 上是否有我缺少的属性设置来强制空格字符在到达第一行的末尾而不是滚动到屏幕之外时换行第二行?

谢谢。

标记

【问题讨论】:

  • 你使用Wrap还是WrapWithOverflow
  • 换行,但我都尝试过,结果相同。
  • 不确定问题可能是什么,但似乎空格被解释为不可包装的单词,另请参见:stackoverflow.com/questions/13161966/…
  • 是的——这也是我看到/想到的。我希望只有一些我可以俯瞰的财产。按照链接 cmets 的思路(我之前在尝试查找有关问题的信息时发现了该链接),我想我的应用程序中可能有一些东西作为问题的根源,所以我创建了一个全新的简单程序仅带有一个文本框,以确保我尽可能处于基本/默认模式,但我仍然看到同样的问题。
  • 你最后解决了吗?

标签: c# wpf


【解决方案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;
    }

【讨论】:

  • 这样可以防止“溢出”问题——但它也打破了自动换行,因为 RichTextBox 将内容处理为一个长单词而不是由空格分隔的几个单词,所以它不是真的可行。
  • @WarpedBoard 确认这不适用于 WPF RichTextbox,按空格的行为就像换行符。尝试了几种不同的 UTF/ASCI 代码, 等,但无法在 RichTextbox 上使用相同的技巧。
猜你喜欢
  • 2010-11-10
  • 2019-06-13
  • 2013-04-12
  • 2010-10-27
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 2018-05-24
相关资源
最近更新 更多