J'ai ceci RTF text:
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Arial;}}
{\colortbl ;\red0\green0\blue0;\red255\green0\blue0;}
\viewkind4\uc1\pard\qc\cf1\fs16 test \b bold \cf2\b0\i italic\cf0\i0\fs17
\par }
Comment définir ce texte en WPF RichTextBox ?
Solution:
public void SetRTFText(string text)
{
MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(text));
this.mainRTB.Selection.Load(stream, DataFormats.Rtf);
}
Devez-vous vraiment commencer par une chaîne?
Une méthode pour charger RTF est la suivante:
rtfBox.Selection.Load(myStream, DataFormats.Rtf);
Vous devriez probablement appeler SelectAll () avant cela si vous souhaitez remplacer le texte existant.
Donc, dans le pire des cas, vous devrez écrire votre chaîne dans un MemoryStream puis alimenter ce flux dans la méthode Load (). N'oubliez pas de positionner = 0 entre les deux.
Mais j'attends de voir quelqu'un trouver quelque chose de plus élégant.
Créer une méthode d'extension
public static void SetRtf(this RichTextBox rtb, string document)
{
var documentBytes = Encoding.UTF8.GetBytes(document);
using (var reader = new MemoryStream(documentBytes))
{
reader.Position = 0;
rtb.SelectAll();
rtb.Selection.Load(reader, DataFormats.Rtf);
}
}
Ensuite, vous pouvez faire un style WinForm-esque
richTextBox1.SetRtf(rtf);
string rtf = @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Arial;}} {\colortbl ;\red0\green0\blue0;\red255\green0\blue0;} \viewkind4\uc1\pard\qc\cf1\fs16 test \b bold \cf2\b0\i italic\cf0\i0\fs17 \par } ";
richTextBox1.Rtf = rtf;
Ça marche bien
J'ai écrit une solution vraiment épurée en étendant la classe RichTextBox pour permettre la liaison à un fichier texte riche réel.
Je suis tombé sur cette question/réponse mais je n'ai pas vraiment obtenu ce que je cherchais, alors j'espère que ce que j'ai appris aidera ceux qui liront à l'avenir.
Chargement d'un RichTextBox à partir d'un RTF utilisant une liaison ou un contrôle RichTextFile