2009-01-19 13 views
2

J'ai un fichier WPF RichTextBox qui est construit de manière dynamique dans un service Web WPF. Ce service Web accepte une chaîne xaml extraite du contenu d'un contrôle Silverlight RichTextBox tiers.Importation de XAML dans WPF RichTextBox

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

Comment insérer ce xaml dans mon WPT RichTextBox? Je comprends un peu les concepts du FlowDocument et le paragraphe et exécuter je peux remplir la WPF RichTextBox avec du texte en utilisant le code ci-dessous,

 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; 

Mais ce que je ne veux vraiment pas avoir à analyser par le XAML moi-même construire un paragraphe car cela peut devenir très compliqué. Existe-t-il un moyen pour que le contrôle sache comment analyser le passé en xaml?

Répondre

7

Vous pouvez utiliser XamlReader pour lire votre chaîne XAML et le convertir à un contrôle:

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

Assurez-vous d'inclure la balise suivante dans votre modèle:

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

HTH

+0

Excellente réponse! –

+0

Je devais utiliser la section pour le faire fonctionner. –

Questions connexes