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 的自定义类。