从RichTextBox中删除Double LineBreak为String

时间:2017-07-26 00:07:14

标签: c# wpf visual-studio xaml

我正在使用Visual Studio 2015,C#,WPF,XAML。

我将文本从RichTextBox复制到string并删除所有LineBreaks

如果按LineBreak + Shift,则会出现Enter。但只有Enter会导致Double LineBreak

Double LineBreakTextRange切断并复制到string之后的任何文字。

这是Double LineBreak是什么以及如何将其删除?

richtextbox linebreak

XAML

<RichTextBox x:Name="rtbMessage" Margin="10,10,10,50" />

C#

Paragraph p = new Paragraph();

// Get RichTextBox TextRange Method
//
public String MessageRichTextBox()
{
    rtbMessage.Document = new FlowDocument(p);

    TextRange textRange = new TextRange(
        rtbMessage.Document.ContentStart,
        rtbMessage.Document.ContentEnd
    );

    return textRange.Text;
}


// RichTextBox to String
// Remove LineBreaks
//
string message = MessageRichTextBox().Replace(Environment.NewLine, "");

删除我尝试过:

https://stackoverflow.com/a/6750310/6806643

Regex.Replace(MessageRichTextBox(), @"[\u000A\u000B\u000C\u000D\u2028\u2029\u0085]+", string.Empty);

.Replace(Environment.NewLine, "")
.Replace("\n", "")
.Replace("\r\n", "")
.Replace("\u2028", "")
.Replace("\u000A", "")
.Replace("\u000B", "")
.Replace("\u000C", "")
.Replace("\u000D", "")
.Replace("\u0085", "")
.Replace("\u2028", "")
.Replace("\u2029", "")

1 个答案:

答案 0 :(得分:2)

当你像这样检索RichTextBox文本时

public String MessageRichTextBox()
{
    rtbMessage.Document = new FlowDocument(p);
    TextRange textRange = new TextRange(
        rtbMessage.Document.ContentStart,
        rtbMessage.Document.ContentEnd
    );
    return textRange.Text;
}

您修改了rtbMessage的内容,因此您获得了错误的内容。我假设您以某种方式引用p中文档的第1段,并将文档截断到第1段。尝试删除行rtbMessage.Document = new FlowDocument(p);并查看它是否适合您?

当用户点击 Enter 时,没有插入双倍LineBreak,但会创建新的Paragraph。您可以通过尝试将插入符号放在可能的空行中来验证它 - 如果它是双线断点,则应该有一个空行并且可以在其上放置插入符号。

无论如何,截图上的文档应该有2个段落块,如下所示:

  • 第1段:“你好,世界。”
  • 第2段:“这是一个测试。&lt; LineBreak /&gt;示例。”

因此我的假设是,当你重新创建一个试图将其内容作为文本检索的文档时,你只保留那里的第一段并丢弃其余部分。