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


Расширение разметки 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