Директива 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.
См. также
- директива x:Class
- расширения разметки x:Type
- встроенные типы для примитивов языка XAML
- универсальные в XAML
.NET Desktop feedback