我被要求创建一个控件,该控件读入rtf文件并分批显示该文件 . 我遇到的问题是字体样式似乎存储在比我提取的片段更高的级别 . 有没有办法从一个文件读取片段并保持格式?我在WPF中使用RichTextbox .
这不是一个完美的解决方案,但它适用于我的特定场景 . 我发布它以防以后帮助其他人,但我仍在寻找更好的解决方案 . 为了使下面的工作,它有两个先决条件:
我的分隔符必须位于文本的开头和结尾
我的分隔符必须是不同的字体或样式,以便它与周围的任何文本都有自己独特的标记
码:
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('{')); }
1 回答
这不是一个完美的解决方案,但它适用于我的特定场景 . 我发布它以防以后帮助其他人,但我仍在寻找更好的解决方案 . 为了使下面的工作,它有两个先决条件:
我的分隔符必须位于文本的开头和结尾
我的分隔符必须是不同的字体或样式,以便它与周围的任何文本都有自己独特的标记
码: