为啥 XamlWriter 会为某些属性添加 ?

Posted

技术标签:

【中文标题】为啥 XamlWriter 会为某些属性添加 ?【英文标题】:Why does XamlWriter adds a to some attributes?为什么 XamlWriter 会为某些属性添加 ? 【发布时间】:2021-07-13 06:28:23 【问题描述】:

我正在使用XamlWriter 将资源字典保存到Xaml,我注意到对于只有pstring 属性,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 序列。 大括号用于绑定。所以删除括号绑定将不起作用。 【参考方案1】:

花括号被添加以在被序列化的值中转义大括号。你不应该真的删除它们。

或者已经有方法了?

不,没有。 如果你想修改书面文字,你自己。使用 string.Replace 或类似的就足够了。没有更好的内置方式。

【讨论】:

以上是关于为啥 XamlWriter 会为某些属性添加 ?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 GCM 会为某些 android 设备返回空的注册 ID?

5.2 Array 类型

为啥 Xcode 会为选择器添加自动完成方法?

“aspNetDisabled”类在哪里定义,为啥 ASP.NET 会为它呈现干扰性的重复 CSS“类”属性?

无法将 Tableview 单元格值添加到 JSON 参数,为啥会为零?迅速

当我将条目插入现有部分时,为啥我的 UITableView 会为我添加另一个部分?