如何从WPF中的RichTextBox获取所有文本

时间:2014-04-04 14:22:21

标签: c# wpf richtextbox .net-4.5

我需要从WPF RichTextBox中获取所有文本。

每个人(How to get a WPF rich textbox into a stringRichTextBox (WPF) does not have string property "Text"http://msdn.microsoft.com/en-us/library/ms754041(v=vs.110).aspx等等)都同意这样的代码:

public static string GetText(RichTextBox rtb)
{
    TextRange textRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
    string text = textRange.Text;
    return text;
}

但它增加了一个“\ r \ n”。在一个非常简单的案例中:

<RichTextBox x:Name="mRichTextBox">
  <FlowDocument>
    <Section>
      <Paragraph>
        <Run Text="The dog is brown. The cat is black."/>
      </Paragraph>
    </Section>
  </FlowDocument>
</RichTextBox>

我明白了:

  

“狗是棕色的。猫是黑色的。\ r \ n”

这可以被视为一个小问题,但实际上我需要准确的文字。

  • 你知道为什么吗?
  • 简单地忽略一个尾随“\ r \ n”?
  • 是否安全
  • 我的代码是否正确?
  • 还有其他问题吗(我的意思是真实文本和我从GetText得到的内容之间存在差异)?

感谢。

2 个答案:

答案 0 :(得分:0)

如果你不需要多线,你可以禁用它,不应该有这个问题。

你也可以像这样删除它们:

  string text = textRange.Text.Replace(Environment.NewLine, "");

此外,如果您只想删除最后一次出现,可以使用如下函数:

public static string ReplaceLastOccurrence(string Source, string Find, string Replace)
{
    int Place = Source.LastIndexOf(Find);
    string result = Source.Remove(Place, Find.Length).Insert(Place, Replace);
    return result;
}

并像这样使用它。

 string text = ReplaceLastOccurrence(textRange.Text,Environment.NewLine,"");

每次你有一个你最后都会得到一条新线,所以一定要按照它来处理。

答案 1 :(得分:0)

但是你得到了实际的文字 您认为段落不应以新行结尾吗?

尝试此操作并将粘贴从屏幕复制到记事本

<RichTextBox x:Name="mRichTextBox">
    <FlowDocument>
        <Section>
            <Paragraph/>
            <Paragraph/>
            <Paragraph>
                <Run Text="The dog is brown. The cat is black."/>
            </Paragraph>
        </Section>
    </FlowDocument>
</RichTextBox>