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


Универсальные шаблоны в XAML

Службы XAML .NET, реализованные в System.Xaml реализации, поддерживают использование универсальных типов CLR. Эта поддержка включает указание ограничений универсальных шаблонов в качестве аргумента типа и принудительное применение ограничения путем вызова соответствующего Add метода для универсальных вариантов сбора. В этом разделе описываются аспекты использования и ссылки на универсальные типы в XAML.

x:TypeArguments

x:TypeArguments — директива, определенная языком XAML. Если он используется в качестве члена типа XAML, поддерживаемого универсальным типом, x:TypeArguments передает аргументы типа ограничения универсального конструктора. Справочный синтаксис, относящийся к использованию x:TypeArgumentsслужб XAML .NET, включая примеры синтаксиса, см . в директиве x:TypeArguments.

Так как x:TypeArguments принимает строку и поддерживает преобразователь типов, он обычно объявляется в использовании XAML в качестве атрибута.

В потоке узлов XAML сведения, объявленные x:TypeArgumentsXamlType.TypeArgumentsStartObject с точки зрения расположения в потоке узлов. Возвращаемое значение XamlType.TypeArguments — это список значений XamlType . Определение того, может ли тип XAML представлять универсальный тип, вызывая.XamlType.IsGeneric

Правила и соглашения синтаксиса для универсальных шаблонов в XAML

В XAML универсальный тип всегда должен быть представлен как ограниченный универсальный. В системе типов XAML или потоке узлов XAML не существует ограниченного универсального типа и не может быть представлен в разметке XAML. Универсальный объект можно ссылаться в синтаксисе атрибута XAML для случаев, когда оно является ограничением вложенного типа универсального типа, на который ссылается x:TypeArgumentsуниверсальный объект, или в случаях, когда x:Type предоставляет ссылку на тип CLR для универсального типа. Универсальные шаблоны ссылок поддерживаются через класс, определенный XamlTypeTypeConverter службами XAML .NET.

Форма синтаксиса атрибута XAML, включенная путем XamlTypeTypeConverter изменения типичного соглашения синтаксиса MSIL/CLR, который использует угловые скобки для типов и ограничений универсальных шаблонов, а вместо этого заменяет скобки для контейнера ограничений. Пример см . в директиве x:TypeArguments.

Универсальные и компоненты XAML 2009

Если вместо сопоставления базовых типов CLR использовать XAML 2009 для получения типов XAML для примитивов общего языка, можно использовать встроенные типы XAML 2009 в качестве информационных элементов.x:TypeArguments Например, можно объявить следующее (сопоставления префиксов не отображаются, но x это пространство имен XAML языка XAML для XAML 2009):

<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>

Поддержка универсальных шаблонов в WPF

Для использования XAML 2006 при конкретной целевой установке WPF x:Class также должен быть предоставлен на том же элементе, что x:TypeArgumentsи элемент, который должен быть корневым элементом в документе XAML. Корневой элемент должен сопоставляться с универсальным типом по крайней мере с одним аргументом типа. Например, PageFunction<T>.

Возможные обходные решения для поддержки универсальных использования включают определение настраиваемого расширения разметки, которое может возвращать универсальные типы, или предоставление определения класса упаковки, наследуемого от универсального типа, но сглаживает универсальное ограничение в собственном определении класса.

В WPF можно использовать функции XAML 2009 вместе с x:TypeArguments, но только для свободного XAML (XAML, который не компилируется разметкой). Скомпилированный с разметкой XAML и форма BAML кода XAML в настоящее время не поддерживают ключевые слова и компоненты XAML 2009.

Пользовательские рабочие процессы в Windows Workflow Foundation для платформа .NET Framework 3.5 не поддерживают универсальное использование XAML.

См. также