我有以下代码将RichTextBox保存到RTF并立即重新加载 - 我之前已将其发布在this question中,我用它来显示序列化/反序列化RTF时出现的问题:
public Stream GenerateStreamFromString(string s)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
private async void SaveAndReloadButton_Click(object sender, RoutedEventArgs e)
{
string data = null;
var range = new TextRange(this.RichText.Document.ContentStart, this.RichText.Document.ContentEnd);
using (var memoryStream = new MemoryStream())
{
range.Save(memoryStream, DataFormats.Rtf);
memoryStream.Position = 0;
using (StreamReader reader = new StreamReader(memoryStream))
{
data = await reader.ReadToEndAsync();
}
}
// load
var stream = GenerateStreamFromString(data);
range = new TextRange(this.RichText.Document.ContentStart, this.RichText.Document.ContentEnd);
range.Load(stream, DataFormats.Rtf);
}
我现在正在尝试将格式更改为DataFormats.Rtf
,这是我从this blog post发现的格式。现在,如果我只是在上面的代码中将DataFormats.XamlPackage
替换为DataFormats.XamlPackage
,那么在调用range.Load(...)
时会出现以下异常:
发生了'System.ArgumentException'类型的异常 PresentationFramework.dll但未在用户代码中处理
其他信息:数据格式无法识别的结构 'XamlPackage'。
有人能说清楚为什么会这样吗?
答案 0 :(得分:0)
嗯,XamlPackage是一种二进制格式,出于某种原因,将它放入字符串会搞砸它。直接使用MemoryStream或文件工作正常:
private void SaveAndReloadButton_Click(object sender, RoutedEventArgs e)
{
var range = new TextRange(this.RichText.Document.ContentStart, this.RichText.Document.ContentEnd);
using (var memoryStream = new MemoryStream())
{
range.Save(memoryStream, DataFormats.XamlPackage);
memoryStream.Position = 0;
// load
range = new TextRange(this.RichText.Document.ContentStart, this.RichText.Document.ContentEnd);
range.Load(memoryStream, DataFormats.XamlPackage);
}
}