2

ここからのコード(Wiimaxからの回答)を使用して、に変換FlowDocumentし、にXML変換し直しFlowDocumentます。しかし今、私はここでいくつかの問題を抱えています。

変換のための私のコード:

public static bool IsFlowDocument(this string xamlString)
        {
            if (xamlString == null || xamlString == "")
                throw new ArgumentNullException();

            if (xamlString.StartsWith("<") && xamlString.EndsWith(">"))
            {
                XmlDocument xml = new XmlDocument();
                try
                {
                    xml.LoadXml(string.Format("<Root>{0}</Root>", xamlString));
                    return true;
                }
                catch (XmlException)
                {
                    return false;
                }
            }
            return false;
        }

        public static FlowDocument toFlowDocument(this string xamlString)
        {
            if (IsFlowDocument(xamlString))
            {
                var stringReader = new StringReader(xamlString);
                var xmlReader = System.Xml.XmlReader.Create(stringReader);

                return XamlReader.Load(xmlReader) as FlowDocument;
            }
            else
            {
                Paragraph myParagraph = new Paragraph();
                myParagraph.Inlines.Add(new Run(xamlString));
                FlowDocument myFlowDocument = new FlowDocument();
                myFlowDocument.Blocks.Add(myParagraph);

                return myFlowDocument;
            }
        }

私はこのコードを入力します(例として、プログラムで使用するコードではありません):

私のコード

そして変換後、私はこのコードを取り戻します:

私のコード

一部の空白がスキップされたことがわかります。そして、名前空間の後に{}を追加しました。変換されたXML文字列を調べたところ、スキップされた空白はありませんが、{}は

誰かがそれを修正する方法を知っていますか、それとも私からの失敗を見ますか?

4

1 に答える 1

1

中括弧:

これはBinding-SyntaxとWPF(XamlreaderとXamlWriter)があなたを助けたいからです;)。

XAMLコードの場合は次のようになります

<Run Text="{" />

Xaml-Engineは最初にバインディングを想定します。FlowDocumentの作成方法がないため、「{」は「{}{」にエスケープされます。

1つの回避策は、次のように中括弧を配置することです。

<Run>{</Run>

別の回避策は、中括弧が最初の文字になるのを避けることです。

<Run Text=" {" />

スペース: 便利な属性があります:

<Run xml:space="preserve">some                   Space</Run>

これはXamlではなく、Xaml-Engineによって処理されるXML属性です。

于 2013-05-15T12:34:30.493 に答える