2010-07-23 60 views
2

我有一个.rtf文件,并希望将其放在silverlight 4的richtextbox中。不幸的是,我们没有.light文件夹中的.rtf属性,我们只有.xaml。如何将.rtf文件导入到silverlight 4 richtextbox?

所以我所做的就是创建一个FlowDocument,然后将这个.rtf加载到这个FlowDocument中,然后将其格式化为xaml。然后将其分配给richtextbox。但我得到了一个理论上的假象。

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

谢谢!

回答

0

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

 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); 
+0

嗯......眼看Silverlight不对这一切支持FlowDocument的是一个有点混乱。 – AnthonyWJones 2010-07-23 15:14:36

+0

是的,你是对的。 Silverlight不支持Flowdocument,我所做的是在webservice中使用FlowDocument,然后Silverlight可以与webservice交谈 – fresky 2010-07-28 07:28:55

0

我建议你看看免费的VectorLight Rich Text Box控制。

+0

我检查过vectorlight richtextbox的api,似乎不直接支持rtf。 – fresky 2010-07-24 06:37:08

+0

哦,是的,Vectorlight只使用XML richtext格式,而不是RTF格式。类似的名字,但不同的格式。 – 2011-01-16 04:39:18

相关问题