Wpf 将RTF转换为FlowDocument的最快方法

Wpf 将RTF转换为FlowDocument的最快方法,wpf,flowdocument,Wpf,Flowdocument,将RTF转换为FlowDocument的最快方法是什么?我将RTF存储为普通字符串,然后重新加载,我使用以下方法 FlowDocument document = new FlowDocument(); document.SetValue(FlowDocument.TextAlignmentProperty, TextAlignment.Left); TextRange content = new TextRange(document.ContentStart, document.Content

将RTF转换为FlowDocument的最快方法是什么?我将RTF存储为普通字符串,然后重新加载,我使用以下方法

FlowDocument document = new FlowDocument();
document.SetValue(FlowDocument.TextAlignmentProperty, TextAlignment.Left);

TextRange content = new TextRange(document.ContentStart, document.ContentEnd);

if (content.CanLoad(DataFormats.Rtf) && string.IsNullOrEmpty(rtf) == false)
{
     // If so then load it with RTF
     byte[] valueArray = Encoding.ASCII.GetBytes(rtf);
     using (MemoryStream stream = new MemoryStream(valueArray))
     {
         content.Load(stream, DataFormats.Rtf);
     }
}

但是这种方法非常慢。我需要加载许多RTF(大约1000)。使过程快速的诀窍是什么?是否有其他方法加载Flowdocument?

Hello Vib当需要有限的文本支持时,应该使用TextBlock元素,当需要最小的文本支持时,可以使用Label


FlowDocument元素是支持内容丰富表示的可重复流动文档的容器,因此,与使用TextBlock或Label控件相比,它对性能的影响更大。

您确实需要定义实际需要的内容。TextBlock一点也不弱。 它有东西可以提供;)

  • 颜色(背景/前景+您甚至可以为文本块的特定部分添加颜色)
  • 对齐(您可以根据需要对齐文本块,甚至可以对齐其中的一部分?!不确定最后一个
  • 它有文本装饰,这意味着它支持粗体/斜体/下划线/删除线等
  • 字体(是的,它支持自定义字体和您想要的任何字体)

但很公平。我认为您应该存储FlowDocument XAML而不是实际的RTF。这样就不会有转换,而且应该快很多倍。(请参阅DataFormats.XAML)

Candie,谢谢你的回复。我需要FlowDocument,因为我需要很多格式,如Texalignment、TextDecoration、字体、颜色等,才能拥有如此丰富的格式。我相信FlowDocument是我的选择,或者还有其他方法吗?此外,我不仅仅是在一些文本块中显示文本,我还需要创建一些UI元素,每个元素都有自己的FlowDocument这就是为什么我必须快速加载多个FlowDocuments.ChrisDD,感谢大家的关注,我需要像RichTextBox这样的功能,所以我肯定需要FlowDocument,问题是如何在加载多个FlowDocuments(大约1000个)时对其进行优化。同样,我需要存储RTF以解决一些互操作性问题。