You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#/WPF:从RichTextBox提取原始RTF并存储至数据库的问题

从WPF FlowDocument提取RTF字符串并存入数据库

你的问题核心是未读取MemoryStream中保存的RTF格式内容,直接调用tr.Text只能获取纯文本。要提取带格式的RTF字符串,需将写入MemoryStream的内容转换为UTF8编码的字符串。

修正后的代码

internal void RefreshMessageText(FlowDocument document)
{
    TextRange tr = new TextRange(document.ContentStart, document.ContentEnd);
    string rtfContent = string.Empty;

    Application.Current.Dispatcher.Invoke(() =>
    {
        using (var stream = new MemoryStream())
        {
            tr.Save(stream, DataFormats.Rtf);
            // 重置流指针到起始位置,否则读取会得到空内容
            stream.Position = 0;
            using (var reader = new StreamReader(stream, Encoding.UTF8))
            {
                rtfContent = reader.ReadToEnd();
            }
        }
    });

    this.MessageText = rtfContent;
}

关键逻辑说明

  1. 调用tr.Save(stream, DataFormats.Rtf):将FlowDocument的带格式内容完整写入MemoryStream
  2. 重置stream.Position = 0:流写入完成后指针停在末尾,必须重置才能读取到内容
  3. 用StreamReader读取流内容:将二进制流转换为UTF8编码的字符串,这就是可直接存入数据库的RTF格式文本

额外提示

如果你的代码本身运行在UI线程中,Application.Current.Dispatcher.Invoke可以省略,直接执行流操作即可。

内容的提问来源于stack exchange,提问作者Slayre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:52:09