【问题标题】:What are square braces surrounding attribute values?什么是包围属性值的方括号?
【发布时间】:2013-03-11 19:25:45
【问题描述】:

在TFS DefaultTemplate.11.1.xaml 构建过程模板中,有很多属性,其整个值都用方括号[] 括起来,所以一个标签的形式是

<tagName attributeName="[attributeValue]">

其中tagNameattributeNameattributeValue 是文本字符串。

我找不到此值语法的任何文档。从模板来看,它似乎导致 XAML 处理器将文本计算为表达式。这在某处有解释吗?

【问题讨论】:

    标签: visual-studio xaml tfs build-process


    【解决方案1】:

    我相信 XAML 中的方括号确实表示值表达式。我仍然不确定究竟是如何支持或强制执行这种定义的。可能性包括:

    -XAML 语法;我认为这是最有可能的答案。

    -A Converter 实现在解析期间检测值何时以方括号开头和结尾,并在处理期间评估其中的内容;我认为这是第二个最有可能的答案。

    - 有可能方括号实际上不是特殊字符并且作为标识符的一部分是有效的,值的评估是通过其他一些未知的机制执行的,并且方括号仅按照约定存在,也许表示该值不是文字而是要计算的表达式。我认为这是一个不太可能的答案。

    支持研究:

    "Expressions created in the WF designer are serialized using square brackets, which is shorthand for VisualBasicValue or VisualBasicReference"

    "Hand edit the workflow XAML file to change value of the Number property to [1+2] (the square brackets denote an expression)"

    "Expressions are literal values or Visual Basic code bound to arguments or properties. They contain value elements (e.g. variables, constants, literals, properties) that are combined with operations to yield a new value. Expressions are written using VB.NET syntax even if the application is in a program using C#."

    "Workflows produced by designer are saved in XAML, where expressions appear enclosed in square brackets."

    上面最后的引用是我发现的唯一官方文档,它以任何方式将表达式周围的方括号提到为 XAML 属性值,这仍然没有说明设计者是否只是随意地这样做并且没有调用任何特殊语法,或者根据官方 XAML 规范,表达式必须出现在方括号中,因此设计者必须这样做。

    【讨论】:

      【解决方案2】:

      这是之前在 XAML 中设置的属性,例如:<x:Property Name="BuildNumberFormat" Type="InArgument(x:String)" /> 如果您在 VS 2012 中打开构建过程模板,您可以使用 Workflow 更改/自定义它们。

      【讨论】:

      • 我认为这是不正确的,除非您可以提供文档链接。 This page 说“在 WF 设计器中创建的表达式使用方括号进行序列化,这是 VisualBasicValue 或 VisualBasicReference 的简写”,this post 说“手动编辑工作流 XAML 文件以更改 Number 属性的值到 [1+2](方括号表示表达式)”。
      • 其他猜测:方括号表达式是对“键”或“索引”的“直接引用”。另外:“少数 XAML 元素可以直接将文本作为其内容进行处理。”^。另外:“BAML 形式是 WPF XAML 实现使用的 XAML 的优化形式。它在使用内部查找和常用类型或成员的标记的意义​​上进行了优化。”^ 方括号是这样的“内部令牌”?
      • 要完成我上面显示的属性是流程模板中的一个参数。因此,当您打开 BP 模板时,您会在底部看到一个选项卡 Arguments,在那里您会找到 XAML 文件中进一步使用的所有属性。
      • 我询问的是 XAML 中值表达式的语法,而不是此流程模板中使用的特定 Arguments。 Arguments 选项卡中的 Default value 字段显示提示“输入 VB 表达式”,因此我相当确定方括号内的属性值表示在 XAML 解析/处理期间评估的 VB 表达式,但我可以实际上找不到任何解释这一点的官方文档。也许[] 不被视为特殊字符,实际上是标识符字符串的有效部分,只是常规表示的表达式?
      • Also: "将即时对象上的单个索引器作为数据上下文 "^ "在索引器内部....例如,您可以有 Path="[(sys:Int32)42,(sys:Int32)24]"^ 这里的第二个引用是我所指的语法类型的一个例子。
      猜你喜欢
      • 2016-04-22
      • 2018-11-16
      • 2015-11-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 2016-06-04
      • 1970-01-01
      相关资源
      最近更新 更多