Gestion des événements Visual Basic et WPF
De manière spécifique, pour le langage Microsoft Visual Basic .NET, vous pouvez utiliser le mot clé Handles propre au langage pour associer des gestionnaires d'événements à des instances, au lieu de joindre ces gestionnaires à l'aide d'attributs ou de la méthode AddHandler. La technique Handles présente toutefois quelques limitations, car sa syntaxe ne prend pas en charge certaines fonctionnalités d'événement routé spécifiques du système d'événement WPF.
Utilisation de "handles" dans une application WPF
Les gestionnaires d'événements connectés à des instances et à des événements par le biais de Handles doivent être définis dans la déclaration de classe partielle de l'instance. C'est également le cas des gestionnaires d'événements assignés par le biais de valeurs d'attribut sur les éléments. Vous pouvez uniquement spécifier Handles pour un élément sur la page qui a la valeur de propriété Name (ou x:Name, directive déclaré). Cela s'explique par le fait que le Name en XAML crée la référence d'instance nécessaire à la prise en charge du format de référence Instance.Event requis par la syntaxe Handles. Le seul élément qui peut être utilisé pour Handles sans référence Name est l'instance de l'élément racine qui définit la classe partielle.
Vous pouvez assigner le même gestionnaire à plusieurs éléments en séparant les références Instance.Événement après Handles par des virgules.
Vous pouvez utiliser Handles pour assigner plusieurs gestionnaires à la même référence Instance.Événement. Ne vous préoccupez pas de l'ordre dans lequel les gestionnaires sont introduits dans la référence Handles ; considérez que les gestionnaires qui gèrent le même événement peuvent être appelés dans n'importe quel ordre.
Pour supprimer un gestionnaire qui a été ajouté avec Handles dans la déclaration, vous pouvez appeler RemoveHandler.
Vous pouvez utiliser Handles pour joindre des gestionnaires pour des événements routés, pour autant que vous attachiez les gestionnaires à des instances qui définissent l'événement géré dans leurs tables de membres. Dans le cas d'événements routés, les gestionnaires joints avec Handles suivent les mêmes règles de routage que ceux joints en tant qu'attributs XAML ou avec la signature commune de AddHandler. Cela signifie que si l'événement est déjà marqué comme géré (la propriété Handled dans les données d'événement a la valeur True), les gestionnaires joints avec Handles ne sont pas appelés en réponse à cette instance d'événement. L'événement peut être marqué comme géré par des gestionnaires d'instance sur un autre élément sur l'itinéraire, ou par la gestion de classe sur l'élément actuel ou sur des éléments antérieurs le long de l'itinéraire. Dans le cas d'événements d'entrée prenant en charge des événements de tunneling/propagation couplés, il est possible que l'itinéraire de tunneling ait marqué la paire d'événements comme gérée. Pour plus d'informations sur les événements routés, consultez Vue d'ensemble des événements routés.
Limitations de "handles" dans le cadre de l'ajout de gestionnaires
Handles ne peut pas référencer de gestionnaires pour des événements attachés. Vous devez utiliser la méthode d'accesseur add pour cet événement attaché ou des attributs d'événement NomType.NomÉvénement en XAML. Pour plus d'informations, consultez Vue d'ensemble des événements routés.
Pour les événements routés, vous pouvez uniquement utiliser Handles pour assigner des gestionnaires aux instances où cet événement apparaît dans la table de membres. Dans le cas des événements routés en général, un élément parent peut toutefois jouer le rôle d'écouteur pour un événement des éléments enfants, même si ce dernier ne figure pas dans la table de membres de l'événement parent. Dans la syntaxe d'attribut, vous pouvez spécifier cela à l'aide d'une forme d'attribut NomType.NomMembre qui qualifie le type qui définit réellement l'événement que vous souhaitez gérer. Par exemple, une Page parente (sans événement Clic défini) peut jouer le rôle d'écouteur pour des événements button-click en assignant un gestionnaire d'attribut au format Button.Click. Handles ne prend cependant pas en charge le format NomType.NomMembre, car il doit prendre en charge un format Instance.Événement incompatible. Pour plus d'informations, consultez Vue d'ensemble des événements routés.
Handles ne peut pas joindre des gestionnaires appelés pour des événements déjà marqués comme gérés. Dans ce cas-ci, vous devez utiliser le code et appeler la surcharge handledEventsToo de AddHandler(RoutedEvent, Delegate, Boolean).
Remarque |
---|
N'utilisez pas la syntaxe Handles dans le code Visual Basic lorsque vous spécifiez un gestionnaire d'événements pour le même événement en XAML.Dans ce cas, le gestionnaire d'événements est appelé deux fois. |
Implémentation de la fonctionnalité "handles" par WPF
Lorsqu'une page Extensible Application Markup Language (XAML) est compilée, le fichier intermédiaire déclare des références FriendWithEvents à chaque élément de la page pour lequel une propriété Name est définie (ou un x:Name, directive déclaré). Chaque instance nommée est un élément susceptible d'être assigné à un gestionnaire par le biais de Handles.
Remarque |
---|
Dans Microsoft Visual Studio, IntelliSense peut vous montrer la terminaison pour laquelle des éléments sont disponibles pour une référence Handles dans une page.Une étape de compilation peut toutefois s'avérer nécessaire pour permettre au fichier intermédiaire de remplir toutes les références Friends. |
Voir aussi
Référence
Concepts
Marquage des événements routés comme gérés et gestion de classe