【问题标题】:Loading from XamlPackage: Unrecognized structure in data format 'XamlPackage'从 XamlPackage 加载:数据格式为“XamlPackage”的结构无法识别
【发布时间】:2014-08-31 15:39:23
【问题描述】:

我有以下代码可以将 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'。

谁能解释为什么会这样?

【问题讨论】:

    标签: c# wpf xaml richtextbox


    【解决方案1】:

    嗯,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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      • 2014-02-24
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多