Поделиться через


Расширение разметки x:Array

Обеспечивает общую поддержку массивов объектов в XAML с помощью расширения разметки. Это соответствует типу XAML x:ArrayExtension в [MS-XAML].

Использование элемента объекта XAML

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

Значения XAML

Ценность Описание
typeName Имя типа, который будет содержать x:Array. typeName может быть (и часто является) префиксом пространства имен XAML, содержащего определения типов XAML.
arrayContents Содержимое элементов, назначенное встроенному свойству ArrayExtension.Items. Как правило, эти элементы указываются как один или несколько элементов объекта, содержащихся в x:Array открывающих и закрывающих тегов. Объекты, указанные здесь, должны быть назначены типу XAML, указанному в typeName.

Замечания

Type является обязательным атрибутом для всех элементов объекта x:Array. Значение параметра Type не требует использования расширения разметки x:Type; Короткое имя типа — это тип XAML, который можно указать как строку.

В реализации служб XAML .NET связь между входным типом XAML и выходными clR Type созданного массива зависит от контекста службы для расширений разметки. Выходные Type — это UnderlyingType входного типа XAML после поиска необходимых XamlType на основе контекста схемы XAML и службы IXamlTypeResolver, которая предоставляет контекст.

При обработке содержимое массива назначается встроенному свойству ArrayExtension.Items. В реализации ArrayExtension это представляется ArrayExtension.Items.

В реализации служб XAML .NET обработка этого расширения разметки определяется классом ArrayExtension. ArrayExtension не запечатан и может использоваться в качестве основы для реализации расширения разметки для пользовательского типа массива.

x:Array более предназначен для расширения общего языка в XAML. Но x:Array также можно использовать для указания значений XAML определенных свойств, которые принимают коллекции, поддерживаемые XAML, в качестве содержимого структурированного свойства. Например, можно указать содержимое свойства IEnumerable с использованием x:Array.

x:Array — это расширение разметки. Расширения разметки обычно реализуются, если существует требование побега значений атрибутов, отличных от литеральных значений или имен обработчиков, и требование является более глобальным, чем просто помещать преобразователи типов на определенные типы или свойства. x:Array частично является исключением из этого правила, так как вместо предоставления альтернативной обработки значений атрибутов x:Array обеспечивает альтернативную обработку его внутреннего текстового содержимого. Это позволяет использовать типы, которые могут не поддерживаться существующей моделью содержимого, группироваться в массив и ссылаться позже в коде путем доступа к именованном массиву; можно вызвать методы Array для получения отдельных элементов массива.

Все расширения разметки в XAML используют фигурные скобки ({,}) в синтаксисе атрибутов, то есть соглашение, с помощью которого обработчик XAML распознает, что расширение разметки должно обрабатывать значение атрибута. Дополнительные сведения о расширениях разметки в целом см. в разделе Преобразователи типов и расширения разметки для XAML.

В XAML 2009 x:Array определяется как примитив языка, а не расширение разметки. Дополнительные сведения см. в встроенных типов для примитивов языка XAML.

Заметки об использовании WPF

Как правило, элементы объекта, заполняющие x:Array, не являются элементами, существующими в пространстве имен XAML WPF, и требуют сопоставления префикса с пространством имен 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.

См. также