Расширение разметки x:Type
Предоставляет объект CLR Type , который является базовым типом для указанного типа XAML.
Использование атрибута XAML
<object property="{x:Type prefix:typeNameValue}" .../>
Использование элемента объекта XAML
<x:Type TypeName="prefix:typeNameValue"/>
Значения XAML
Стоимость | Description |
---|---|
prefix |
Необязательно. Префикс, который сопоставляет пространство имен XAML, отличное от по умолчанию. Указание префикса часто не требуется. См. заметки. |
typeNameValue |
Обязательно. Имя типа, разрешаемое для текущего пространства имен XAML по умолчанию; или указанный сопоставленный префикс, если prefix он указан. |
Замечания
Расширение x:Type
разметки имеет аналогичную функцию typeof()
оператору в C# или GetType
оператору в Microsoft Visual Basic.
Расширение x:Type
разметки предоставляет поведение преобразования из строки для свойств, которые принимают тип Type. Входные данные — это тип XAML. Связь между входным типом XAML и выходным clR Type заключается в том, что выходные данные Type являются UnderlyingType входными XamlTypeданными, после поиска необходимых XamlType данных на основе контекста схемы XAML и IXamlTypeResolver службы, которую предоставляет контекст.
В службах XAML .NET обработка этого расширения разметки определяется классом TypeExtension .
В конкретных реализациях платформ некоторые свойства, которые принимают Type в качестве значения, могут принимать имя типа напрямую (строковое значение типа Name
). Однако реализация этого поведения является сложным сценарием. Примеры см. в разделе "Заметки об использовании WPF", приведенном ниже.
Синтаксис атрибутов является наиболее распространенным синтаксисом, используемым с этим расширением разметки. Строковая лексема, указываемая после строки идентификатора x:Type
, присваивается в качестве значения TypeName соответствующего класса расширения TypeExtension. В контексте схемы XAML по умолчанию для служб XAML .NET, основанных на типах CLR, значение этого атрибута является либо Name нужным типом, либо содержит префикс Name для сопоставления пространства имен XAML, отличного от по умолчанию.
Расширение разметки можно использовать в синтаксисе x:Type
элемента объекта. В этом случае для правильной TypeName инициализации расширения необходимо указать значение свойства.
x:Type
Расширение разметки также можно использовать в качестве подробного атрибута. Однако это использование не является типичным:<object property="{x:Type TypeName=typeNameValue}" .../>
Заметки об использовании WPF
Пространство имен и сопоставление типов XAML по умолчанию
Пространство имен XAML по умолчанию для программирования WPF содержит большинство типов XAML, необходимых для типичных сценариев XAML; Поэтому при ссылке на значения типов XAML часто можно избежать префиксов. Может потребоваться сопоставить префикс, если вы ссылаетесь на тип из пользовательской сборки или типов, существующих в сборке WPF, но из пространства имен CLR, которое не сопоставлено с пространством имен XAML по умолчанию. Дополнительные сведения о префиксах, пространствах имен XAML и сопоставлении пространств имен CLR см. в разделе "Пространства имен XAML" и "Сопоставление пространств имен" для WPF XAML.
Свойства типа, поддерживающие typename-as-string
WPF поддерживает методы, позволяющие указывать значение некоторых свойств типа Type без необходимости x:Type
использования расширения разметки. Вместо этого можно указать значение в виде строки, которая называет тип. Примерами этого являются ControlTemplate.TargetType и Style.TargetType. Поддержка этого поведения не предоставляется с помощью преобразователей типов или расширений разметки. Вместо этого это поведение отсрочки, реализованное с помощью FrameworkElementFactory.
Silverlight поддерживает аналогичное соглашение. На самом деле Silverlight в настоящее время не поддерживает {x:Type}
поддержку языка XAML и не принимает {x:Type}
использование за пределами нескольких обстоятельств, которые предназначены для поддержки миграции WPF-Silverlight XAML. Таким образом, поведение typename-as-string встроено во все вычисления собственных свойств Silverlight, где Type это значение.
XAML 2009
XAML 2009 обеспечивает дополнительную поддержку универсальных типов и изменяет поведение x:TypeArguments
функций и x:Type
обеспечивает эту поддержку.
x:TypeArguments
и связанный элемент объекта для экземпляра универсального объекта может находиться в элементах, отличных от корневого. Дополнительные сведения см. в разделе "XAML 2009" директивы x:TypeArguments.XAML 2009 поддерживает синтаксис для указания ограничения универсального типа в разметке. Это можно использовать
x:TypeArguments
, либоx:Type
двумя функциями в сочетании.Реализация XAML WPF при обработке XAML 2009 для загрузки также добавляет эту возможность в неявное поведение преобразования типов для определенных свойств платформы, использующих тип Type.
В WPF можно использовать функции XAML 2009, но только для свободного XAML (XAML, который не компилируется разметкой). Скомпилированный с разметкой XAML и форма BAML кода XAML в настоящее время не поддерживают ключевые слова и компоненты XAML 2009.
См. также
.NET Desktop feedback