C# 如何读取RTF文件的部分内容并保持格式

C# 如何读取RTF文件的部分内容并保持格式,c#,wpf,rtf,C#,Wpf,Rtf,我被要求创建一个控件,该控件读取rtf文件并以部分形式显示该文件。我遇到的问题是,字体样式似乎存储在比我提取的代码片段更高的级别。有没有办法从一个文件中读取代码片段并保留格式?我正在WPF中使用RichTextbox。这不是一个完美的解决方案,但它适用于我的特定场景。我张贴它的情况下,它帮助别人以后,但我仍然在寻找一个更好的解决方案。要使以下各项发挥作用,它有两个先决条件: 我的分隔符必须位于文本的开头和结尾 我的分隔符必须是不同的字体或样式,以便它有自己与任何周围文本不同的标记 代码: 私

我被要求创建一个控件,该控件读取rtf文件并以部分形式显示该文件。我遇到的问题是,字体样式似乎存储在比我提取的代码片段更高的级别。有没有办法从一个文件中读取代码片段并保留格式?我正在WPF中使用RichTextbox。

这不是一个完美的解决方案,但它适用于我的特定场景。我张贴它的情况下,它帮助别人以后,但我仍然在寻找一个更好的解决方案。要使以下各项发挥作用,它有两个先决条件:

  • 我的分隔符必须位于文本的开头和结尾
  • 我的分隔符必须是不同的字体或样式,以便它有自己与任何周围文本不同的标记
代码:

私有静态IEnumerable GetListFromDelimitedText(字符串文本)
{
var textSplit=text.Split(新的[]{“~~~~~~~~~~~”},StringSplitOptions.None);
var header=GetHeaderOfRtf(textSplit);
var footer=getFooterOftf(textSplit);
无表头和无表头的var列表=
textSplit.Where((text,index)=>index>0&&index
{
var textwithoutleadingbault=text.Substring(text.IndexOf('}')+1);
var cleanedText=textWithoutLeadingBracket.Substring(0,textWithoutLeadingBracket.LastIndexOf('{'));
返回页眉+干净的文本+页脚;
}
);
}
私有静态字符串GetFooterOftf(IEnumerable textSplit)
{
var lastSplit=textSplit.Last();
返回lastplit.Substring(lastplit.IndexOf('}')+1);
}
私有静态字符串GetHeaderOffrtf(IEnumerable textSplit)
{
var firstSplit=textSplit.First();
返回firstSplit.Substring(0,firstSplit.LastIndexOf('{'));
}
private static IEnumerable<String> GetListFromDelimitedText(String text)
{
  var textSplit = text.Split(new[] { "~~~~~~~~" }, StringSplitOptions.None);

  var header = GetHeaderOfRtf(textSplit);
  var footer = GetFooterOfRtf(textSplit);
  var listWithoutHeaderAndFooter =
    textSplit.Where((text, index) => index > 0 && index < textSplit.Length - 1);
  return GetSnippetsWithHeaderAndFooter(listWithoutHeaderAndFooter, header, footer);
}

private static IEnumerable<String> GetSnippetsWithHeaderAndFooter(IEnumerable<String> snippetList, String header, String footer)
{
  return snippetList.Select(text =>
    {
      var textWithoutLeadingBracket = text.Substring(text.IndexOf('}') + 1);
      var cleanedText = textWithoutLeadingBracket.Substring(0, textWithoutLeadingBracket.LastIndexOf('{'));
      return header + cleanedText + footer;
    }
  );
}

private static string GetFooterOfRtf(IEnumerable<String> textSplit)
{
  var lastSplit = textSplit.Last();
  return lastSplit.Substring(lastSplit.IndexOf('}') + 1);
}

private static string GetHeaderOfRtf(IEnumerable<String> textSplit)
{
  var firstSplit = textSplit.First();
  return firstSplit.Substring(0, firstSplit.LastIndexOf('{'));
}