美文网首页
WPF RichTextBox内容的保存和加载(支持图片)

WPF RichTextBox内容的保存和加载(支持图片)

作者: 达哥傻乐 | 来源:发表于2021-06-07 13:45 被阅读0次

最近在使用WPF中的RichTextBox进行带格式、图形的内容进行保存和加载,突然发现使用Xaml的格式保存发现再加载回来的时候,图片会有问题,分析发现在该格式中,它里面的图片并未保存下来,而是通过URI的方式引用的。
在网上搜索和学习后,找到了解决方法。
首先,RichTextBox的Document属性为FlowDocument,它可以转换成如下内容:

格式 Binary/Text 是否支持内容格式定义 是否支持图形
Text Text
Rtf Binary
Xaml Text
XamlPackage Binary

从上表可以看出,只有Rtf和XamlPackage两种格式支持图形,这里以XamlPackage格式为例,演示如何进行加载和保存。
下面的例子演示了把FlowDocument的内容转换成数据库Binary字段的Description以及把byte[]的Description通过get以FlowDocument的格式取出来的方法(需要保存成文件或者通过文件加载的话,只需要把MemoryStream换成FileStream再作小小改变即可):

     public byte[] Description { get; set; }
     public FlowDocument UIDescription
        {
            set
            {
                var doc = value;

                var textRange = new TextRange(doc.ContentStart, doc.ContentEnd);
                var stream = new MemoryStream();
                textRange.Save(stream, System.Windows.DataFormats.XamlPackage);

                Description = new byte[stream.Length];
                stream.Position = 0;
                stream.Read(Description, 0, (int)stream.Length);
                stream.Close();
            }
            get
            {
                var doc = new FlowDocument();
                if (Description != null)
                {
                    var textRange = new TextRange(doc.ContentStart, doc.ContentEnd);
                    var stream = new MemoryStream(Description);
                    textRange.Load(stream, System.Windows.DataFormats.XamlPackage);
                    stream.Close();
                }
                return doc;
            }
        }

对于使用Text和Xaml两种格式的加载和保存,需要使用到XamlReader.Load()和XamlWriter.Save()。

上面内容参考了以下内容,感谢。

WPF 保存和加载 RichTextBox 内容_蓝山咖啡的博客-CSDN博客

达叔傻乐(darwin.zuo@163.com)

相关文章

网友评论

      本文标题:WPF RichTextBox内容的保存和加载(支持图片)

      本文链接:https://www.haomeiwen.com/subject/ojsleltx.html