Расширение разметки x:Type
Предоставляет объект CLR Type, который является базовым типом для указанного типа XAML.
Использование атрибута XAML
<object property="{x:Type prefix:typeNameValue}" .../>
Использование элемента объекта XAML
<x:Type TypeName="prefix:typeNameValue"/>
Значения XAML
Ценность | Описание |
---|---|
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
или двумя функциями в сочетании.Реализация WPF XAML при обработке XAML 2009 для загрузки также добавляет эту возможность в неявное поведение преобразования типов для определенных свойств платформы, использующих тип Type.
В WPF можно использовать функции XAML 2009, но только для свободного XAML (XAML, который не компилируется разметкой). Скомпилированный разметкой XAML для WPF и форма BAML XAML в настоящее время не поддерживают ключевые слова и функции XAML 2009.
См. также
- Style
- стилей и шаблонов
(WPF .NET) - Обзор XAML (WPF .NET)
- расширения разметки и XAML WPF
.NET Desktop feedback