我正在使用Visual Studio 2015,C#,WPF,XAML。
我将文本从RichTextBox
复制到string
并删除所有LineBreaks
。
如果按LineBreak
+ Shift
,则会出现Enter
。但只有Enter
会导致Double LineBreak
。
Double LineBreak
被TextRange
切断并复制到string
之后的任何文字。
这是Double 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", "")
答案 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个段落块,如下所示:
因此我的假设是,当你重新创建一个试图将其内容作为文本检索的文档时,你只保留那里的第一段并丢弃其余部分。