【问题标题】:Fastest way to convert RTF to FlowDocument将 RTF 转换为 FlowDocument 的最快方法
【发布时间】:2012-08-21 23:56:26
【问题描述】:

将 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?

【问题讨论】:

    标签: wpf flowdocument


    【解决方案1】:

    你真的需要定义你真正需要的东西。 TextBlock 一点也不弱。 它提供了一些东西;)。

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

    但足够公平。我认为您应该存储 FlowDocument XAML 而不是实际的 RTF。这样就不会发生转换,并且应该快几倍。 (参见 DataFormats.xaml)

    【讨论】:

    • ChrisDD,感谢您的关注,我需要 RichTextBox 之类的功能,所以我肯定需要 FlowDocument,问题是如何在加载其中许多(大约 1000 个)时对其进行优化。我再次需要存储 RTF 以解决一些互操作性问题。
    【解决方案2】:

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

    FlowDocument 元素是可重排文档的容器,支持丰富的内容呈现,因此比使用 TextBlock 或 Label 控件具有更大的性能影响。

    【讨论】:

    • Candie,感谢您的回复。我需要 FlowDocument,因为我需要很多格式,例如 Texalignment、TextDecoration、Font、Colors 等,要拥有如此丰富的格式,我相信 FlowDocument 是我的选择,或者还有其他方法吗?此外,我不只是在一些 TextBlock 中显示文本,我需要创建一些 UI 元素,每个元素都有自己的 FlowDocument,这就是为什么我必须快速加载多个 FlowDocument。
    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 2011-03-13
    • 2013-03-14
    • 2019-06-23
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多