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


Директива x:TypeArguments

Передает аргументы типа, ограничивающие универсальный конструктор универсального типа.

Использование атрибута XAML

<object x:TypeArguments="typeString" .../>

Значения XAML

Ценность Описание
object Объявление элемента объекта типа XAML, поддерживаемого универсальным типом СРЕДЫ CLR. Если object относится к типу XAML, который не относится к пространству имен XAML по умолчанию, object требует префикса, чтобы указать пространство имен XAML, где object существует.
typeString Строка, объявляющая одно или несколько имен типов XAML в виде строк, которая предоставляет аргументы типа для универсального типа CLR. Дополнительные заметки синтаксиса см. в примечаниях к дополнительным синтаксисам.

Замечания

В большинстве случаев типы XAML, используемые в качестве элемента информации в строке typeString, префиксируются. Типичные типы универсальных ограничений СРЕДЫ CLR (например, Int32 и String) приходят из библиотек базовых классов CLR. Эти библиотеки не сопоставляются с типичными пространствами имен XAML по умолчанию для платформы и поэтому требуют сопоставления префиксов для использования XAML.

Можно указать несколько имен типов XAML с помощью разделителя-запятой.

Если универсальные ограничения сами используют универсальные типы, аргументы типа вложенных ограничений могут содержаться скобками ().

Обратите внимание, что это определение x:TypeArguments зависит от служб XAML .NET и использует резервное копирование СРЕДЫ CLR. Определение уровня языка можно найти в [MS-XAML] раздел 7.3.11.

Примеры использования

В этих примерах предполагается, что объявляются следующие определения пространства имен XAML:

xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"

Перечисление<строковых>

<scg:List x:TypeArguments="sys:String" ...> создает экземпляр нового List<T> с аргументом типа String.

Словарь<String,String>

<scg:Dictionary x:TypeArguments="sys:String,sys:String" ...> создает экземпляр нового Dictionary<TKey,TValue> с двумя аргументами типа String.

Строка>> очереди<KeyValuePair<String,String

<scg:Queue x:TypeArguments="scg:KeyValuePair(sys:String,sys:String)" ...> создает экземпляр нового Queue<T> с ограничением KeyValuePair<TKey,TValue> с аргументами типа внутреннего ограничения String и String.

Использование XAML 2006 и WPF Generic XAML

Для использования XAML 2006 и XAML, используемых для приложений WPF, существуют следующие ограничения для использования x:TypeArguments и универсальных типов из XAML в целом:

  • Только корневой элемент XAML-файла может поддерживать универсальное использование XAML, ссылающееся на универсальный тип.

  • Корневой элемент должен сопоставляться с универсальным типом по крайней мере с одним аргументом типа. Примером является PageFunction<T>. Функции страницы — это основной сценарий поддержки универсального использования XAML в WPF.

  • Элемент объекта XAML корневого элемента для универсального объекта также должен объявить частичный класс с помощью x:Class. Это верно, даже если определяется действие сборки WPF.

  • x:TypeArguments не может ссылаться на вложенные универсальные ограничения.

XAML 2009 или XAML 2006 без зависимостей WPF 3.0 или WPF 3.5

В службах .NET XAML для XAML 2006 или XAML 2009 ограничения, связанные с WPF для универсального использования XAML, ослабляются. Вы можете создать экземпляр универсального элемента объекта в любой позиции в разметке XAML, которую поддерживает система резервного типа и объектная модель.

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

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

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

См. также