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