x:Array 标记扩展

通过标记扩展提供对 XAML 中对象的数组的一般支持。 这对应于 [MS-XAML] 中的 x:ArrayExtension XAML 类型。

XAML 对象元素用法

<x:Array Type="typeName">
  arrayContents
</x:Array>

XAML 值

说明
typeName x:Array 将包含的类型的名称。 typeName 可能为(并且通常为)包含 XAML 类型定义的 XAML 命名空间前缀。
arrayContents 分配给内部 ArrayExtension.Items 属性的项内容。 通常,这些项被指定为在 x:Array 开始标记和结束标记中包含的一个或多个对象元素。 此处指定的对象需要分配给在 typeName 中指定的 XAML 类型。

注解

Type 是所有 x:Array 对象元素的必需属性。 Type 参数值不需要使用 x:Type 标记扩展;类型的短名称是 XAML 类型,可以指定为字符串。

在 .NET XAML Services 实现中,输入 XAML 类型与所创建数组的输出 CLR Type 之间的关系受标记扩展的服务上下文影响。 根据 XAML 架构上下文和上下文提供的 IXamlTypeResolver 服务查找必要的 XamlType 后,输出 Type 是输入 XAML 类型的 UnderlyingType

处理后,将数组内容分配给 ArrayExtension.Items 固有属性。 在 ArrayExtension 实现中,它由 ArrayExtension.Items 表示。

在 .NET XAML 服务实现中,对此标记扩展的处理由 ArrayExtension 类定义。 ArrayExtension 未密封,可用作自定义数组类型的标记扩展实现的基础。

x:Array 更适用于 XAML 中的常规语言扩展性。 但 x:Array 也可用于指定某些属性的 XAML 值,这些属性采用 XAML 支持的集合作为其结构化属性内容。 例如,可以使用 x:Array 用法指定 IEnumerable 属性的内容。

x:Array 是标记扩展。 当要求转义特性值应为非文本值或非处理程序名称时,通常会实现标记扩展,相对于只在某些类型或属性上放置类型转换器而言,此需求更具有全局性。 x:Array 是该规则的部分例外,因为 x:Array 没有提供替代属性值处理,而是提供了其内部文本内容的替代处理。 此行为将使现有内容模型可能不支持的类型分组到数组中,并通过访问命名数组在代码隐藏中稍后引用;你可以调用 Array 方法来获取单个数组项。

XAML 中的所有标记扩展在其属性语法中均使用大括号 {,}),根据这一约定,XAML 处理器认定标记扩展必须处理属性值。 有关标记扩展的详细信息,请参阅 XAML 的类型转换器和标记扩展

在 XAML 2009 中,x:Array 定义为语言基元而不是标记扩展。 有关详细信息,请参阅公共 XAML 语言基元的内置类型

WPF 使用情况节点

通常,填充 x:Array 的对象元素不是 WPF XAML 命名空间中存在的元素,并且需要前缀映射到非默认 XAML 命名空间。

例如,下面是包含两个字符串的简单数组,前缀为 sys(还有 x),均在数组级别定义。

<x:Array Type="sys:String"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib">
  <sys:String>Hello</sys:String>
  <sys:String>World</sys:String>
</x:Array>

对于用作数组元素的自定义类型,该类还必须支持在 XAML 中作为对象元素实例化的要求。 有关详细信息,请参阅 XAML 和用于 WPF 的自定义类

另请参阅