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; }
关键逻辑说明
- 调用
tr.Save(stream, DataFormats.Rtf):将FlowDocument的带格式内容完整写入MemoryStream - 重置
stream.Position = 0:流写入完成后指针停在末尾,必须重置才能读取到内容 - 用
StreamReader读取流内容:将二进制流转换为UTF8编码的字符串,这就是可直接存入数据库的RTF格式文本
额外提示
如果你的代码本身运行在UI线程中,Application.Current.Dispatcher.Invoke可以省略,直接执行流操作即可。
内容的提问来源于stack exchange,提问作者Slayre
相关产品推荐
相关产品推荐

