x:Subclass, directive

Modifie le comportement de compilation de balisage XAML lorsqu’il x:Class est également fourni. Au lieu de créer une classe partielle basée sur x:Class, la classe fournie x:Class est créée en tant que classe intermédiaire, puis votre classe dérivée fournie est censée être basée sur x:Class.

Utilisation d'attributs XAML

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

Valeurs XAML

Valeur Description
namespace facultatif. Spécifie un espace de noms CLR qui contient classname. Si namespace elle est spécifiée, un point (.) sépare namespace et classname.
classname Obligatoire. Spécifie le nom CLR de la classe partielle qui connecte le code XAML chargé et votre code-behind pour ce code XAML. Consultez la section Notes.
subclassNamespace facultatif. Peut être différent de si chaque espace de namespace noms peut résoudre l’autre. Spécifie un espace de noms CLR qui contient subclassName. Si subclassName elle est spécifiée, un point (.) sépare subclassNamespace et subclassName.
subclassName Obligatoire. Spécifie le nom CLR de la sous-classe.

Dépendances

X :Class Directive doit également être fournie sur le même objet, et cet objet doit être l’élément racine de la production XAML.

Notes

x:Subclass l’utilisation est principalement destinée aux langues qui ne prennent pas en charge les déclarations de classe partielles.

La classe utilisée comme classe x:Subclass imbriquée ne peut pas être une classe imbriquée et x:Subclass doit faire référence à l’objet racine, comme expliqué dans la section « Dépendances ».

Sinon, la signification conceptuelle de x:Subclass n’est pas définie par une implémentation des services XAML .NET. Cela est dû au fait que le comportement des services XAML .NET ne spécifie pas le modèle de programmation global par lequel le balisage XAML et le code de stockage sont connectés. Les implémentations d’autres concepts liés à x:Class et x:Subclass sont effectuées par des frameworks spécifiques qui utilisent des modèles de programmation ou des modèles d’application pour définir comment connecter le balisage XAML, le balisage compilé et le code-behind basé sur CLR. Chaque infrastructure peut avoir ses propres actions de génération qui permettent un certain comportement ou des composants spécifiques qui doivent être inclus dans l’environnement de génération. Dans une infrastructure, les actions de génération peuvent également varier en fonction du langage CLR spécifique utilisé pour le code-behind.

Notes d’utilisation WPF

x:Subclass peut être sur une racine de page ou sur la Application racine dans la définition de l’application, qui a x:Classdéjà . La déclaration x:Subclass sur n’importe quel élément autre qu’une page ou une racine d’application, ou en le spécifiant lorsqu’il n’existe pas x:Class , provoque une erreur au moment de la compilation.

La création de classes dérivées qui fonctionnent correctement pour le x:Subclass scénario est assez complexe. Vous devrez peut-être examiner les fichiers intermédiaires (fichiers .g produits dans le dossier obj de votre projet par compilation de balisage, avec des noms qui incorporent les noms de fichiers .xaml). Ces fichiers intermédiaires peuvent vous aider à déterminer l’origine de certaines constructions de programmation dans les classes partielles jointes dans l’application compilée.

Les gestionnaires d’événements de la classe dérivée doivent être internal override (Friend Overrides dans Microsoft Visual Basic) pour remplacer les stubs des gestionnaires créés dans la classe intermédiaire pendant la compilation. Sinon, les implémentations de classe dérivées masquent (ombre) l’implémentation de classe intermédiaire et les gestionnaires de classes intermédiaires ne sont pas appelés.

Lorsque vous définissez les deux x:Class et x:Subclassque vous n’avez pas besoin de fournir d’implémentation pour la classe référencée par x:Class. Il vous suffit de lui attribuer un nom via l’attribut x:Class afin que le compilateur ait des conseils pour la classe qu’il crée dans les fichiers intermédiaires (le compilateur ne sélectionne pas de nom par défaut dans ce cas). Vous pouvez donner à la x:Class classe une implémentation ; toutefois, ce n’est pas le scénario classique pour l’utilisation à la fois x:Class et x:Subclass.

Voir aussi