Code-behind et XAML dans WPF

Code-behind est un terme utilisé pour décrire le code joint à des objets définis par le balisage, lorsqu’une page XAML est compilée. Cette rubrique décrit les exigences relatives au code-behind ainsi qu’un autre mécanisme de code inline pour le code en XAML.

Cette rubrique contient les sections suivantes :

Prérequis

Cette rubrique part du principe que vous avez lu le code XAML dans WPF et que vous avez une connaissance de base de la programmation CLR et orientée objet.

Code-Behind et le langage XAML

Le langage XAML inclut des fonctionnalités au niveau du langage qui permettent d’associer des fichiers de code aux fichiers de balisage, du côté du fichier de balisage. Plus précisément, le langage XAML définit les fonctionnalités de langage x:Class Directive, x:Subclass Directive et x:ClassModifier Directive. Exactement comment le code doit être produit et comment intégrer le balisage et le code, ne fait pas partie de ce que le langage XAML spécifie. Il est laissé aux frameworks tels que WPF pour déterminer comment intégrer le code, comment utiliser XAML dans les modèles d’application et de programmation, ainsi que les actions de génération ou toute autre prise en charge requise.

Code-behind, Gestionnaire d’événements et Exigences de classe partielle dans WPF

  • La classe partielle doit dériver du type qui sauvegarde l’élément racine.

  • Notez que sous le comportement par défaut des actions de génération de compilation de balisage, vous pouvez laisser la dérivation vide dans la définition de classe partielle côté code-behind. Le résultat compilé suppose que le type de stockage de la racine de page est la base de la classe partielle, même s’il n’est pas spécifié. Toutefois, s’appuyer sur ce comportement n’est pas une bonne pratique.

  • Les gestionnaires d’événements que vous écrivez dans le code-behind doivent être des méthodes d’instance et ne peuvent pas être des méthodes statiques. Ces méthodes doivent être définies par la classe partielle dans l’espace de noms CLR identifié par x:Class. Vous ne pouvez pas qualifier le nom d’un gestionnaire d’événements pour indiquer à un processeur XAML de rechercher un gestionnaire d’événements pour le câblage d’événements dans une autre étendue de classe.

  • Le gestionnaire doit correspondre au délégué pour l’événement approprié dans le système de type de stockage.

  • Pour le langage Microsoft Visual Basic spécifiquement, vous pouvez utiliser le mot clé propre Handles au langage pour associer des gestionnaires à des instances et des événements dans la déclaration du gestionnaire, au lieu d’attacher des gestionnaires à des attributs dans le système d’événements WPF, tels que certains scénarios d’événements routés ou événements attachés. Pour plus d’informations, consultez Gestion des événements Visual Basic et WPF.

x:Code

x:Code est un élément de directive défini dans le schéma WPF) qui n’essaie pas d’interpréter le contenu littéralement au format XML.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="MyNamespace.MyCanvasCodeInline"
>
  <Button Name="button1" Click="Clicked">Click Me!</Button>
  <x:Code><![CDATA[
    void Clicked(object sender, RoutedEventArgs e)
    {
        button1.Content = "Hello World";
    }
  ]]></x:Code>
</Page>

Inline Code Limitations

Vous devez envisager d’éviter ou de limiter l’utilisation du code inline. En termes d’architecture et de philosophie de codage, le maintien d’une séparation entre le balisage et le code-behind maintient les rôles de concepteur et de développeur beaucoup plus distincts. Au niveau plus technique, le code que vous écrivez pour le code inline peut être difficile à écrire, car vous écrivez toujours dans les mappages WPF incluent la plupart des espaces de noms CLR présents dans les assemblys WPF ; vous devrez qualifier entièrement les appels aux types et aux membres contenus dans les autres espaces de noms CLR. Vous ne pouvez pas également définir quoi que ce soit au-delà de la classe partielle dans le code inline, et toutes les entités de code utilisateur que vous référencez doivent exister en tant que membre ou variable dans la classe partielle générée. D’autres fonctionnalités de programmation spécifiques au langage, telles que les macros ou #ifdef les variables globales ou les variables de build, ne sont pas disponibles. Pour plus d’informations, consultez le type XAML intrinsèque x:Code.

Voir aussi