0

我有一个Silverlight托管在WebPage.

我试图将 RTF 文本加载到其中,Silverlight RichTextBlock但无论如何我都找不到这个。

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

在 C# 中我喜欢这样做;

myRTB.Rtf = myrtfString;

但是没有 Rtf 属性!

4

1 回答 1

1

RichTextBox 尽管名称具有误导性,但它不支持 RTF。您必须将您的 RTF 源转换为 XAML。我使用一种方法来执行此操作,

使用 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);
于 2014-03-20T01:12:44.747 回答