【发布时间】:2021-07-13 06:28:23
【问题描述】:
我正在使用XamlWriter 将资源字典保存到Xaml,我注意到对于只有{p} 的string 属性,XamlWriter 在文本前添加了{}(导致@987654328 @)。
为什么会这样?有什么办法可以防止这种情况发生吗?
或者至少在使用标准XDocument.Parse() 回读时安全地删除它?
我是这样保存它的:
public class Example
{
public string Property { get; set; }
}
var resource = new ResourceDictionary();
resource.Add("Example", new Example { Property = "{p}" });
var settings = new XmlWriterSettings
{
Indent = true,
IndentChars = "\t",
OmitXmlDeclaration = true,
CheckCharacters = true,
CloseOutput = true,
ConformanceLevel = ConformanceLevel.Fragment,
Encoding = Encoding.UTF8,
};
using (var fileStream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None))
using (var writer = XmlWriter.Create(fileStream, settings))
XamlWriter.Save(resource, writer);
编辑
{} 是当文本包含像 {...} 这样的左方括号和右方括号时添加的转义序列。
https://docs.microsoft.com/en-us/dotnet/desktop/xaml-services/escape-sequence-markup-extension
现在,剩下的唯一问题是如何安全地从文本中删除这些转义序列。我可以简单地进行替换或修剪,还是已经有方法了?
【问题讨论】:
-
这不是必需的,问题是关于理论的,但我已经知道它为什么会发生。我只是想知道是否有一种简单且安全的方法可以从 Xaml 中删除 scape 序列。
-
大括号用于绑定。所以删除括号绑定将不起作用。
标签: c# xml wpf xaml xamlwriter