可以在Silverlight中查看RTF

本文关键字:RTF Silverlight | 更新日期: 2023-09-27 17:50:58

我有一个托管在WebPage上的Silverlight控件5。

我试图将RTF文本加载到Silverlight RichTextBlock中,但我找不到这样做的方法。

MSDN上的信息是指向控件添加新内容,但不加载/解析实际的RTF字符串。

在c#中我想这样做;

myRTB.Rtf = myrtfString;

但是没有Rtf属性!

可以在Silverlight中查看RTF

RichTextBox,尽管它的名字令人误解,不支持RTF。您必须将RTF源转换为XAML。我用了一种方法,

使用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);