Импорт XAML в WPF RichTextBox - PullRequest
2 голосов
/ 19 января 2009

У меня есть WPF RichTextBox, который динамически встроен в веб-сервис WPF. Этот веб-сервис принимает строку xaml, извлеченную из содержимого стороннего элемента управления Silverlight RichTextBox.

<Paragraph TextAlignment=\"Left\"><Run FontFamily=\"Comic Sans MS\" FontSize=\"16\" Foreground=\"#FF0000FF\" FontWeight=\"Bold\" >This text is blue and bold.</Run></Paragraph>

Как мне вставить этот xaml в мой WPF RichTextBox? Я немного понимаю концепции FlowDocument, Paragraph и Run, поэтому я могу заполнить WPF RichTextBox текстом, используя следующий код:

        FlowDocument flowDocument = new FlowDocument();
        Paragraph par = new Paragraph();
        par.FontSize = 16;
        par.FontWeight = FontWeights.Bold;
        par.Inlines.Add(new Run("Paragraph text"));
        flowDocument.Blocks.Add(par);
        rtb.Document = flowDocument;

Но то, что я действительно не хочу разбирать сам xaml, чтобы построить абзац, так как это может быть очень сложно. Есть ли способ, чтобы элемент управления знал, как анализировать переданное в xaml?

1 Ответ

7 голосов
/ 21 января 2009

Вы можете использовать XamlReader, чтобы прочитать строку Xaml и преобразовать ее в элемент управления:

string templateString = "<Paragraph xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"  TextAlignment=\"Left\"><Run FontFamily=\"Comic Sans MS\" FontSize=\"16\" Foreground=\"#FF0000FF\" FontWeight=\"Bold\" >This text is blue and bold.</Run></Paragraph>";
StringReader stringReader = new StringReader(templateString);
XmlReader xmlReader = XmlReader.Create(stringReader);
Paragraph template = (Paragraph)XamlReader.Load(xmlReader);

Просто убедитесь, что вы включили в свой шаблон следующий тег:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

НТН

...