web-dev-qa-db-ja.com

RTFテキストをWPF RichTextBoxコントロールに設定します

私はこれを持っています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 }

このテキストを WPF RichTextBox に設定する方法は?


解決:

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

ヘンク・ホルターマンの助けに感謝します。

33
Andrija

あなたは本当に文字列で始める必要がありますか?

ロードする1つの方法RTFは次のとおりです。

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

既存のテキストを置き換える場合は、おそらくSelectAll()をその前に呼び出す必要があります。

したがって、最悪の場合、文字列をMemoryStreamに書き込み、そのストリームをLoad()メソッドにフィードする必要があります。間にPosition = 0を忘れないでください。

しかし、私は誰かがもっとエレガントなものを思い付くのを待っています。

41
Henk Holterman

拡張メソッドを作成する

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

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;

それはうまく機能しています

2
user10026242

RichTextBoxクラスを拡張して実際のリッチテキストファイルにバインドできるようにすることで、非常に洗練されたソリューションを作成しました。

私はこの質問/回答に出くわしましたが、探しているものが本当に得られなかったので、これを読んだ人の助けになることを願っています。

バインディングまたはRichTextFileコントロールを使用してRTFファイルからRichTextBoxを読み込む

1
Rhyous