将RTF文本设置为WPF RichTextBox控件

问题描述 投票:30回答:5

我有这个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);
}

Thanks for help from Henk Holterman.

c# .net wpf richtextbox
5个回答
41
投票

你真的必须从字符串开始吗?

加载RTF的一种方法是:

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

如果要替换现有文本,可以在此之前调用SelectAll()。

因此,在最坏的情况下,您必须将您的字符串写入MemoryStream,然后将该流提供给Load()方法。不要忘记介于两者之间的位置= 0。

但我等着看到有人想出更优雅的东西。


7
投票

创建一个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);
        }
    }

然后你可以做WinForm风格的风格

richTextBox1.SetRtf(rtf);


2
投票
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;

它工作正常


1
投票

我通过扩展RichTextBox类以允许Binding到实际的富文本文件来编写一个非常灵活的解决方案。

我遇到了这个问题/答案,但并没有真正得到我想要的东西,所以希望我学到的东西能帮助那些将来读这篇文章的人。

Loading a RichTextBox from an RTF file using binding or a RichTextFile control


-2
投票

编辑:此答案假定WinForms而不是WPF。

只需使用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;
© www.soinside.com 2019 - 2024. All rights reserved.