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


Директива x:Subclass

Изменяет поведение компиляции разметки XAML при предоставлении x:Class. Вместо создания частичного класса, основанного на x:Class, предоставленный x:Class создается в качестве промежуточного класса, а затем предоставленный производный класс будет основан на x:Class.

Использование атрибута XAML

<object x:Class="namespace.classname" x:Subclass="subclassNamespace.subclassName">
   ...
</object>

Значения XAML

Ценность Описание
namespace Необязательный. Указывает пространство имен СРЕДЫ CLR, содержащее classname. Если указан namespace, точка (.) отделяет namespace и classname.
classname Обязательно. Указывает имя среды CLR частичного класса, который подключает загруженный XAML и код для этого XAML. См. примечания.
subclassNamespace Необязательный. Может отличаться от namespace, если каждое пространство имен может разрешить другое. Указывает пространство имен СРЕДЫ CLR, содержащее subclassName. Если указан subclassName, точка (.) отделяет subclassNamespace и subclassName.
subclassName Обязательно. Указывает имя среды CLR подкласса.

Зависимости

директивы x:Class также должны быть предоставлены в одном объекте, и этот объект должен быть корневым элементом рабочей среды XAML.

Замечания

x:Subclass использование в основном предназначено для языков, которые не поддерживают объявления частичного класса.

Класс, используемый в качестве x:Subclass, не может быть вложенным классом, и x:Subclass должен ссылаться на корневой объект, как описано в разделе "Зависимости".

В противном случае концептуальное значение x:Subclass не определено реализацией служб XAML .NET. Это связано с тем, что поведение служб XAML .NET не указывает общую модель программирования, с помощью которой подключается разметка XAML и код резервной копии. Реализации дополнительных концепций, связанных с x:Class и x:Subclass, выполняются определенными платформами, используюющими модели программирования или модели приложений для определения способа подключения разметки XAML, компиляции разметки и программной части среды CLR. Каждая платформа может иметь собственные действия сборки, которые позволяют выполнять некоторые действия или определенные компоненты, которые должны быть включены в среду сборки. В рамках платформы действия сборки также могут отличаться в зависимости от конкретного языка СРЕДЫ CLR, используемого для программной части.

Заметки об использовании WPF

x:Subclass может находиться на корневой странице или в корневом каталоге Application в определении приложения, который уже x:Class. Объявление x:Subclass в любом элементе, отличном от корневого каталога страницы или приложения, или указание его, где нет x:Class, вызывает ошибку во время компиляции.

Создание производных классов, которые работают правильно для сценария x:Subclass, является довольно сложным. Возможно, потребуется проверить промежуточные файлы (G-файлы, созданные в папке obj проекта путем компиляции разметки, с именами, включающими имена файлов XAML). Эти промежуточные файлы помогают определить происхождение определенных конструкций программирования в присоединенных частичных классах в скомпилированном приложении.

Обработчики событий в производном классе должны быть internal override (Friend Overrides в Microsoft Visual Basic), чтобы переопределить заглушки для обработчиков, созданных в промежуточном классе во время компиляции. В противном случае реализации производных классов скрывают (тень) реализацию промежуточного класса и обработчики промежуточных классов не вызываются.

При определении x:Class и x:Subclassвам не нужно предоставлять реализацию для класса, на который ссылается x:Class. Необходимо только дать ему имя с помощью атрибута x:Class, чтобы компилятор получил некоторые рекомендации по классу, который он создает в промежуточных файлах (компилятор не выбирает имя по умолчанию в данном случае). Вы можете предоставить классу x:Class реализацию; Однако это не типичный сценарий для использования как x:Class, так и x:Subclass.

См. также