x:Subclass (Directiva)
Modifica el comportamiento de compilación de marcado XAML cuando también se proporciona x:Class
. En lugar de crear una clase parcial basada en x:Class
, se proporciona un x:Class
creado como una clase intermedia y, a continuación, se espera que la clase derivada proporcionada se base en x:Class
.
Uso de atributos XAML
<object x:Class="namespace.classname" x:Subclass="subclassNamespace.subclassName">
...
</object>
Valores XAML
Value | Descripción |
---|---|
namespace |
Opcional. Especifica un espacio de nombres CLR que contiene classname . Si se especifica namespace , un punto (.) separa namespace y classname . |
classname |
Obligatorio. Especifica el nombre CLR de la clase parcial que conecta el XAML cargado y el código subyacente para ese XAML. Vea la sección Comentarios. |
subclassNamespace |
Opcional. Puede ser diferente de namespace si cada espacio de nombres puede resolver el otro. Especifica un espacio de nombres CLR que contiene subclassName . Si se especifica subclassName , un punto (.) separa subclassNamespace y subclassName . |
subclassName |
Obligatorio. Especifica el nombre CLR de la subclase. |
Dependencias
La directiva x:Class también debe proporcionarse en el mismo objeto y ese objeto debe ser el elemento raíz de la producción XAML.
Comentarios
El uso de x:Subclass
está pensado principalmente para lenguajes que no admiten declaraciones de clase parciales.
La clase usada como x:Subclass
no puede ser una clase anidada y x:Subclass
debe hacer referencia al objeto raíz, como se explica en la sección «Dependencias».
De lo contrario, el significado conceptual de x:Subclass
no estará definido por una implementación de servicios XAML de .NET. Esto se debe a que el comportamiento de los servicios XAML de .NET no especifica el modelo de programación general por el que se conectan el marcado XAML y el código de respaldo. Las implementaciones de conceptos adicionales relacionados con x:Class
y x:Subclass
se realizan mediante marcos específicos que usan modelos de programación o modelos de aplicación para definir cómo conectar el marcado XAML, el marcado compilado y el código subyacente basado en CLR. Cada marco puede tener sus propias acciones de compilación que habilitan parte del comportamiento o componentes específicos que deben incluirse en el entorno de compilación. Dentro de un marco las acciones de compilación también pueden variar en función del lenguaje CLR específico que se usa para el código subyacente.
Notas de uso de WPF
x:Subclass
puede estar en una raíz de página o en la raíz Application de la definición de la aplicación, que ya tiene x:Class
. Declarar x:Subclass
en cualquier elemento que no sea una raíz de página o de aplicación o especificarlo donde no existe x:Class
genera un error en tiempo de compilación.
La creación de clases derivadas que funcionan correctamente para el escenario x:Subclass
es bastante compleja. Es posible que tenga que examinar los archivos intermedios (los archivos .g generados en la carpeta obj del proyecto mediante la compilación de marcado, con nombres que incorporan los nombres de archivo .xaml). Estos archivos intermedios pueden ayudarle a determinar el origen de determinadas construcciones de programación en las clases parciales combinadas de la aplicación compilada.
Los controladores de eventos de la clase derivada deben ser internal override
(Friend Overrides
en Microsoft Visual Basic) para invalidar los códigos auxiliares de los controladores según se crean en la clase intermedia durante la compilación. De lo contrario, las implementaciones de clase derivada ocultarán («shadow») la implementación de clase intermedia y los controladores de clase intermedios no se invocarán.
Al definir x:Class
y x:Subclass
, no es necesario proporcionar ninguna implementación para la clase a la que hace referencia x:Class
. Solo tiene que asignarle un nombre a través del atributo x:Class
para que el compilador tenga algunas instrucciones para la clase que crea en los archivos intermedios (el compilador no selecciona un nombre predeterminado en este caso). Puede proporcionar a la clase x:Class
una implementación; sin embargo, este no es el escenario típico para usar x:Class
y x:Subclass
.
Vea también
.NET Desktop feedback