WPF Richtextbox XamlWriter行为

时间:2010-04-12 17:36:36

标签: wpf xaml richtextbox xamlreader

我正在尝试将一些c#源代码保存到数据库中。基本上我有一个RichTextBox,用户可以输入他们的代码并将其保存到数据库中。

当我从visual studio环境中复制和粘贴时,我想保留格式化等。所以我选择将FlowDocuments Xaml保存到数据库并将其设置回RichTextBox.Document。

我的下面两个函数序列化并反序列化RTB的内容。

     private string GetXaml(FlowDocument document)
    {
        if (document == null) return String.Empty;
        else{
            StringBuilder sb = new StringBuilder();
            XmlWriter xw = XmlWriter.Create(sb);
            XamlDesignerSerializationManager sm = new XamlDesignerSerializationManager(xw);
            sm.XamlWriterMode = XamlWriterMode.Expression;                

            XamlWriter.Save(document, sm );
            return sb.ToString();
        }
    }

    private FlowDocument GetFlowDocument(string xamlText)
    {
        var flowDocument = new FlowDocument();
        if (xamlText != null) flowDocument = (FlowDocument)XamlReader.Parse(xamlText);
        // Set return value
        return flowDocument;
    }

但是,当我尝试序列化和反序列化以下代码时,我注意到这种不正确的(?)行为

using System;
public class TestCSScript : MarshalByRefObject
{

}

序列化XAML

using System; public class TestCSScript : MarshalByRefObject {}{ }

注意新的“{}”

我在这里做错了什么......先谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我现在已经辞职了,但如果你们中有人找到一个干净的解决方案,请发布。

我使用了Stringbuilder的Replace调用来删除不需要的字符。

    private string GetXaml(FlowDocument document)
    {
        if (document == null) return String.Empty;
        else
        {

            StringBuilder sb = new StringBuilder();
            using (XmlWriter xw = XmlWriter.Create(sb))
            {
                XamlDesignerSerializationManager sm = new XamlDesignerSerializationManager(xw);
                sm.XamlWriterMode = XamlWriterMode.Expression;

                XamlWriter.Save(document, sm);
            }
            sb.Replace("{}", "");
            return sb.ToString();
        }

    }

我有一种感觉,当xamlwriter遇到“{”字符时 - 它将其表示为绑定表达式。我想知道这个角色的转义序列是什么。

注意 - 我尝试更改

XamlWriterMode from XamlWriterMode.Expression to XamlWriterMode.Value

没有快乐。