最近在使用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()。
上面内容参考了以下内容,感谢。
达叔傻乐(darwin.zuo@163.com)
网友评论