从XamlPackage加载:无法识别的数据格式结构';XamlPackage';
本文关键字:XamlPackage 数据 格式结构 识别 加载 | 更新日期: 2023-09-27 18:20:18
我有以下代码可以将RichTextBox保存到RTF并立即重新加载它-我之前在这个问题中发布过它,我用它来显示序列化/取消序列化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
,这是我从这篇博客文章中发现的一种格式。现在,如果我在上面的代码中简单地用DataFormats.XamlPackage
替换DataFormats.XamlPackage
,我在调用range.Load(...)
时会得到以下异常:
中发生类型为"System.ArgumentException"的异常PresentationFramework.dll,但未在用户代码中处理
附加信息:数据格式中无法识别的结构"XamlPackage"。
有人能解释为什么会发生这种情况吗?
嗯,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);
}
}