Gestion des événements Visual Basic et WPF

Pour le langage Microsoft Visual Basic .NET spécifiquement, vous pouvez utiliser les mot clé spécifiques Handles au langage pour associer des gestionnaires d’événements à des instances, au lieu d’attacher des gestionnaires d’événements avec des attributs ou à l’aide de la AddHandler méthode. Toutefois, la Handles technique d’attachement de gestionnaires à des instances présente certaines limitations, car la Handles syntaxe ne peut pas prendre en charge certaines fonctionnalités d’événement routées spécifiques du système d’événements 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 ne pouvez spécifier Handles qu’un élément sur la page qui a une Name valeur de propriété (ou x :Name Directive déclarée). Cela est dû au fait que le Name code XAML crée la référence d’instance nécessaire pour prendre en charge le format de référence Instance.Event requis par la Handles syntaxe. Le seul élément qui peut être utilisé sans HandlesName référence est l’instance d’é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.Event après Handles par des virgules.

Vous pouvez utiliser Handles pour assigner plusieurs gestionnaires à la même référence Instance.Event. 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 Handles a été ajouté 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 joignez les gestionnaires à des instances qui définissent l’événement géré dans leurs tables de membres. Pour les événements routés, les gestionnaires qui sont attachés avec Handles suivent les mêmes règles de routage que les gestionnaires attachés 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 Handled propriété dans les données d’événement est True), les gestionnaires attachés avec ne Handles 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 add méthode d’accesseur pour cet événement attaché, ou les attributs d’événement typename.eventname 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 nom_type.nom_événement qui qualifie le type qui définit réellement l’événement que vous souhaitez gérer. Par exemple, un parent Page (sans Click événement défini) peut écouter les événements de clic de bouton en affectant un gestionnaire d’attributs au formulaire Button.Click. Handles ne prend cependant pas en charge le format nom_type.nom_événement, 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. Au lieu de cela, vous devez utiliser du code et appeler la handledEventsToo surcharge de AddHandler(RoutedEvent, Delegate, Boolean).

Remarque

N’utilisez pas la Handles syntaxe 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 XAML (Extensible Application Markup Language) est compilée, le fichier intermédiaire déclare des références FriendWithEvents à chaque élément de la page qui a un Name jeu de propriétés (ou 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 Visual Studio, IntelliSense peut vous montrer l’achèvement des éléments disponibles pour une Handles référence 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