如何将 .rtf 文件导入 silverlight 4 Richtextbox?

Posted

技术标签:

【中文标题】如何将 .rtf 文件导入 silverlight 4 Richtextbox?【英文标题】:How to import a .rtf file to silverlight 4 richtextbox? 【发布时间】:2011-03-19 21:20:53 【问题描述】:

我有一个 .rtf 文件,想把它放在 silverlight 4 的 Richtextbox 中。不幸的是,silverlight 4 的richtextbox 中没有 .rtf 属性,我们只有 .xaml。

所以我所做的是创建一个 FlowDocument,而不是将 .rtf 加载到此 FlowDocument,然后将其格式化为 xaml。然后将其分配给richtextbox。但我遇到了一个参数异常。

谢谢!

【问题讨论】:

【参考方案1】:

我建议您改用免费的VectorLight Rich Text Box 控件。

【讨论】:

我查了vectorlight richtextbox的api,好像不直接支持rtf。 哦,是的,Vectorlight 仅使用 XML 富文本格式,而不是 RTF。名称相似,但格式不同。【参考方案2】:

到目前为止,我使用了一个丑陋的解决方案,使用 FlowDocument 将格式从 rtf 更改为 xaml。然后删除 SL4 富文本框中不接受的属性,代码如下。它有效,但我讨厌它。 我想知道有没有更好的解决方案。

        string xaml = String.Empty;
        FlowDocument doc = new FlowDocument();
        TextRange range = new TextRange(doc.ContentStart, doc.ContentEnd);

        using (MemoryStream ms = new MemoryStream())
        
            using(StreamWriter sw = new StreamWriter(ms))
            
                sw.Write(from);
                sw.Flush();
                ms.Seek(0, SeekOrigin.Begin);
                range.Load(ms, DataFormats.Rtf);
            
        


        using(MemoryStream ms = new MemoryStream())
        
            range = new TextRange(doc.ContentStart, doc.ContentEnd);

            range.Save(ms, DataFormats.Xaml);
            ms.Seek(0, SeekOrigin.Begin);
            using (StreamReader sr = new StreamReader(ms))
            
                xaml = sr.ReadToEnd();
            
        

        // remove all attribuites in section and remove attribute margin 

        int start = xaml.IndexOf("<Section");
        int stop = xaml.IndexOf(">") + 1;

        string section = xaml.Substring(start, stop);

        xaml = xaml.Replace(section, "<Section xml:space=\"preserve\" HasTrailingParagraphBreakOnPaste=\"False\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">");
        xaml = xaml.Replace("Margin=\"0,0,0,0\"", String.Empty);

【讨论】:

嗯...看到 Silverlight 根本不支持 Flowdocument,这有点令人困惑。 是的,你是对的。 Silverlight 不支持 Flowdocument,我做的是在 webservice 中使用 FlowDocument,然后 silverlight 可以与 webservice 对话【参考方案3】:

我需要做类似的事情(还没有做...)

我遇到了NRTFTRee,这是一个 C# RTF 解析器,应该移植到 silverlight。 http://www.codeproject.com/KB/string/nrtftree.aspx

http://nrtftree.sourceforge.net/examples.html

【讨论】:

以上是关于如何将 .rtf 文件导入 silverlight 4 Richtextbox?的主要内容,如果未能解决你的问题,请参考以下文章

导入、解析、编辑和保存 RTF 文档,格式保留在 iPad 和 Droid 应用程序中

如何将几个rtf文件按序合并

在C#中如何将多个rtf文件内容组合在一起用一个rtf文件保存?

如何将rtf文件合并

如何将 BlockUIContainer 中 RichTextBox 的内容保存到 RTF 文件?

我应该如何使用 OpenOffice 自动化将 HTML 文件转换为 RTF?