gpt4 book ai didi

c# - 将 Flowdocument 转换为 XML 并将 XML 转换为 Flowdocument

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:07 25 4
gpt4 key购买 nike

我使用来自 here 的代码(来自 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;
}
}

我输入此代码(例如,它不是我在我的程序中使用的代码):

My code

转换后我得到这段代码:

My code

您会看到一些空白被跳过了。在命名空间之后添加了一个 { }我查看了转换后的 XML 字符串,没有跳过空白,但是 { } 是他们的 to

有人知道如何解决这个问题或看到我失败了吗?

最佳答案

花括号:

这是因为 Binding-Syntax 和 WPF(Xamlreader 和 XamlWriter)想要帮助您;)。

当在您的 XAML 代码中是这样的

<Run Text="{" />

Xaml 引擎首先采用绑定(bind)。由于没有并且取决于您创建 FlowDocument 的方式,'{' 被转义为 '{}{'

一种解决方法是,您可以像这样放置花括号:

<Run>{</Run>

另一种解决方法是避免大括号是第一个字符:

<Run Text=" {" />

空格:有一个属性可以派上用场:

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

这不是 Xaml,而是 Xaml 引擎处理的 XML 属性。

关于c# - 将 Flowdocument 转换为 XML 并将 XML 转换为 Flowdocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15615676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com