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 conditions requises pour 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 des connaissances de base sur 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 caractéristiques de langage x :Class Directive, x :Subclass Directive et x :ClassModifier Directive. Exactement la façon dont le code doit être généré 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 d’autres prises en charge nécessaires.

Configuration requise pour code-behind, gestionnaire d’événements et classes partielles 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 l’mot clé propre Handles au langage pour associer des gestionnaires à des instances et des événements dans la déclaration de gestionnaire, au lieu d’attacher des gestionnaires à des attributs en XAML. Toutefois, cette technique présente certaines limitations, car la Handles mot clé ne peut pas prendre en charge toutes les fonctionnalités spécifiques du système d’événements WPF, telles 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 en XAML. Un x:Code élément de directive peut contenir du code de programmation inline. Le code défini inline peut interagir avec le code XAML sur la même page. L’exemple suivant illustre le code C# inline. Notez que le code se trouve à l’intérieur de l’élément x:Code et que le code doit être entouré par <CDATA[...]]> pour échapper au contenu xml, afin qu’un processeur XAML (interprétant le schéma XAML ou le schéma WPF) n’essaie pas d’interpréter le contenu littéralement en tant que CODE 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 le concepteur et les rôles de développeur beaucoup plus distincts. Au niveau technique, le code que vous écrivez pour le code inline peut être maladroit à écrire, car vous écrivez toujours dans la classe partielle générée par XAML et ne peut utiliser que les mappages d’espaces de noms XML par défaut. Étant donné que vous ne pouvez pas ajouter using d’instructions, vous devez qualifier pleinement un grand nombre d’appels d’API que vous effectuez. Les mappages WPF par défaut 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 de build globales, ne sont pas disponibles. Pour plus d’informations, consultez le type XAML intrinsèque x :Code.

Voir aussi