0


1

WPF Richtextbox XamlWriterの動作

いくつかのC#ソースコードをデータベースに保存しようとしています。 基本的に、ユーザーがコードを入力してデータベースに保存できるRichTextBoxがあります。

Visual Studio環境からコピーアンドペーストするとき、フォーマットなどを保持したいと思います。 そこで、FlowDocuments Xamlをデータベースに保存し、これをRichTextBox.Documentに戻すことを選択しました。

以下の2つの関数は、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は

`システムを使用;パブリッククラスTestCSScript:MarshalByRefObject {} {} `

「\ {}」の新しいセットに注目してください

ここで私は何をしているのですか。 助けてくれてありがとう!

1 Answer


0


私は今のところ遅刻した解決策に辞任しましたが、もしあなたの誰かがきれいなものを見つけたら、それを投稿してください。

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

喜びなしで。