Подтвердить что ты не робот

Установите RTF-текст в элемент управления WPF RichTextBox

У меня есть текст 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 }

Как установить этот текст в WPF RichTextBox?


Решение:

public void SetRTFText(string text)
{
    MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(text));
    this.mainRTB.Selection.Load(stream, DataFormats.Rtf);
}

Спасибо за помощь Хенка Холтермана.

4b9b3361

Ответ 1

Вам действительно нужно начинать со строки?

Один способ загрузки RTF:

rtfBox.Selection.Load(myStream, DataFormats.Rtf);

Вы, вероятно, должны вызывать SelectAll() до этого, если вы хотите заменить существующий текст.

Итак, в худшем случае вам придется записать свою строку в MemoryStream, а затем передать этот поток методу Load(). Не забудьте указать позицию = 0 между ними.

Но я жду, чтобы кто-то придумал что-то более элегантное.

Ответ 2

Создать метод расширения

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

Затем вы можете создать стиль WinForm-esque

richTextBox1.SetRtf(rtf);

Ответ 3

Я написал действительно гладкое решение, расширив класс RichTextBox, чтобы позволить привязке к реальному текстовому файлу.

Я столкнулся с этим вопросом/ответом, но на самом деле не получил то, что искал, поэтому, надеюсь, то, что я узнал, поможет тем, кто читает это в будущем.

Загрузка RichTextBox из RTF файла с использованием привязки или управления RichTextFile

Ответ 4

Просто используйте RichTextBox.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;