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 服务实现中,输入 XAML 类型和创建的数组的输出 CLR Type 之间的关系受标记扩展的服务上下文的影响。 输出 Type 是在根据 XAML 架构上下文和上下文提供的 IXamlTypeResolver 服务查找必要的 XamlType 后,输入 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 中实例化为对象元素的要求。 有关详细信息,请参阅 WPFXAML 和自定义类。

另请参阅