web-dev-qa-db-fra.com

Définissez RTF texte dans le contrôle WPF RichTextBox

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

Merci pour l'aide de Henk Holterman.

34
Andrija

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.

42
Henk Holterman

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

7
P.Brian.Mackey
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

2
user10026242

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

1
Rhyous