Директива 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
.
См. также
- директива x:Class
- XAML и пользовательские классы для WPF
.NET Desktop feedback