Расширение разметки x:Type
Предоставляет объект Type среды CLR, который является базовым типом для указанного типа XAML.
Использование атрибута XAML
<object property="{x:Type prefix:typeNameValue}" .../>
Использование элемента объекта XAML
<x:Type TypeName="prefix:typeNameValue"/>
Значения XAML
prefix |
Необязательный. Префикс, который сопоставляет пространство имен XML, не являющееся пространством имен по умолчанию. Указание префикса зачастую необязательно. См. примечания. |
typeNameValue |
Обязательный. Имя типа, которое разрешается в текущее пространство имен XAML по умолчанию или в указанный сопоставленный префикс, если предоставляется prefix. |
Заметки
Расширение разметки x:Type имеет функцию, аналогичную оператору typeof() в C# или оператору GetType в Microsoft Visual Basic.
Расширение разметки x:Type выполняет преобразование из строки для свойств, принимающих тип Type. На входе используется тип XAML. Связь между типом входных данных XAML и Type вывода CLR заключается в том, что выходные данные Type являются свойством UnderlyingType входного XamlType, после поиска необходимых XamlType на основе контекста схемы XAML и службы IXamlTypeResolver, предоставляемых контекстом.
В службах XAML .NET Framework обработка этого расширения разметки определяется классом TypeExtension.
В конкретных реализациях платформы некоторые свойства, принимающие Type в качестве значения, способны принять имя типа напрямую (строковое значение типа Name). Тем не менее реализация такого поведения является сложным сценарием. Примеры см. ниже в подразделе "Примечания об использовании WPF".
Синтаксис атрибута является наиболее распространенным синтаксисом, который используется с этим расширением разметки. маркер строки, указанный после идентификатора строки x:Type, получает значение TypeName базового класса расширения TypeExtension. В контексте схемы XAML по умолчанию для служб XAML .NET Framework, которая основана на типах среды 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.
Свойства типов, поддерживающие имя типа в виде строки
WPF поддерживает методы, позволяющие указывать значения некоторых свойств типа Type без необходимости использования расширения разметки x:Type. Вместо этого можно указать значение в виде строки с именем типа. К подобным примерам относятся ControlTemplate.TargetType и Style.TargetType. Поддержка этого поведения не обеспечивается через преобразователи типов или расширения разметки. Вместо этого это поведение откладывания реализуется через FrameworkElementFactory.
Silverlight поддерживает аналогичную конвенцию Фактически Silverlight в настоящее время не поддерживает {x:Type} в поддержке языка XAML и не принимает вхождения {x:Type} за исключением некоторых случаев, которые предусмотрены для поддержки миграции XAML между WPF и Silverlight. Следовательно, поведение "имя типа в виде строки" присуще всем оценкам внутренних свойств 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.
См. также
Ссылки
Основные понятия
Стилизация и использование шаблонов