Как импортировать файл .rtf в silverlight 4 richtextbox? - PullRequest
2 голосов
/ 23 июля 2010

У меня есть файл .rtf и я хочу поместить его в richtextbox в silverlight 4. К сожалению, у нас нет свойства .rtf в silverlight 4 richtextbox, у нас есть только .xaml.

Итак, я создал FlowDocument, затем загрузил .rtf в этот FlowDocument, а затем отформатировал его в xaml. затем назначил его richtextbox. Но я получил аргумент исключение.

Как импортировать файл .rtf в silverlight 4 richtextbox?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 23 июля 2010

Я предлагаю вам взглянуть на бесплатное VectorLight Rich Text Box вместо элемента управления.

0 голосов
/ 28 июля 2010

Мне нужно сделать что-то подобное (еще не сделали ...)

Я наткнулся на NRTFTRee , синтаксический анализатор C # RTF, который должен портировать на silverlight. http://www.codeproject.com/KB/string/nrtftree.aspx

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

0 голосов
/ 23 июля 2010

До сих пор я использовал некрасивое решение, используйте FlowDocument, чтобы изменить формат с rtf на xaml. Затем удалите атрибуты, не принятые в поле Richtext 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);
...