2014-08-31 109 views
0

我有以下代码将RichTextBox保存为RTF并立即重新加载它 - 我以前在this question中发布了它,并且我使用它来显示序列化/解串行时出现的问题RTF:从XamlPackage加载:数据格式为'XamlPackage'的无法识别的结构

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

那么,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); 
     } 
    } 
相关问题