2010-04-28 5 views
0

J'ai besoin d'aide pour implémenter un comportement commun dans certains contrôles.WPF et les événements de contrôles créés dynamiquement

Dans mon application WPF, j'ai une forme principale qui contient un panneau et un bouton:

Ok

Le bouton exécutera une méthode Save lorsque vous cliquez dessus La méthode Save lit certaines données du formulaire et enregistre les données dans une base de données.

Le panneau est rempli de contrôles créés dynamiquement (tels que la zone de texte, les listes déroulantes, etc.). La forme principale instancie une classe MainViewModel. Cette classe MainViewModel instancie une classe appelée UIFactory. Nous avons donc 3 niveaux ici.

Dans la classe UIFactory, les contrôles sont en cours de création. Le panneau du formulaire principal est envoyé en tant que paramètre à une méthode de la classe MainModelView appelée GenerateUI. Cette méthode GenerateUI dans la classe MainViewModel appelle une méthode GenerateControls sur la classe UIFactory qui prend le même panneau en tant que paramètre. La méthode GenerateControls de la classe UIFactory ajoute ensuite des contrôles créés dynamiquement sur le panneau. Ce que je veux réaliser est que chaque fois que l'utilisateur tape ENTRÉE quand il tape dans un de ces contrôles créés dynamiquement par exemple une zone de texte, je veux que ce comportement soit le même que cliquer sur le bouton dans mon formulaire principal. Mais comment je fais ça? J'ai pensé à mettre en place des événements routés sur mes contrôles, mais je n'arrive pas à comprendre comment le faire. Pourriez-vous s'il vous plaît me conseiller sur la façon d'atteindre mon objectif?

Cordialement,

OKB

Répondre

0

Peut-être que l'événement attaché Keyboard.KeyUp peut vous aider. Vous pouvez le définir sur le panneau principal qui contient les contrôles créés dynamiquement et ensuite effectuer l'opération de sauvegarde si la touche enfoncée était la touche ENTRÉE.

0

J'ai réussi à créer une œuvre aroind à mon problème:

Ce que je faisais était de créer un contrôle utilisateur personnalisé (appelons-le un récipient). Ce contrôle est hébergé dans mon application wpf en utilisant WindowsFormsHost au lieu du panneau. Ensuite, j'ajoute le contrôle utilisateur créé dynamiquement à mon nouveau contrôle utilisateur personnalisé (le conteneur) et ajoute un KeyEventHandler sur l'événement KeyUp de chaque contrôle enfant. J'ai créé un gestionnaire d'événement et d'événement personnalisé dans mon conteneur qui va capturer tous les événements KeyUp des contrôles enfants, vérifiez si e.KeyValue == 13 (ENTER) puis mon événement personnalisé à partir du conteneur qui sera géré dans mon wpf forme. Ugly comme h * ll, mais ça marche.

Questions connexes