2009-09-14 5 views
7

Existe-t-il un moyen standard de router tous les événements de clé du contrôle A vers un autre contrôle B? Je souhaite que le focus du clavier sera toujours sur A cependant le gestionnaire d'événements de A déclencherait tous les gestionnaires d'événements de B pour les événements de clé.Routage des événements de clé vers un autre contrôle

modifier: Clarification: l'appel d'un gestionnaire d'événements spécifique que j'ai écrit pour B n'est pas suffisant. Je dois imiter l'événement réel. Donc, par exemple, je veux que si une clé est envoyée à un TextBox, il sera écrit au TextBox. La solution donnée ci-dessous ne fait pas cela (pour ne pas mentionner le fait que si de nouveaux gestionnaires d'événements sont ajoutés à B il échoue complètement). Je suis conscient que WPF différencie la mise au point logique et la mise au point du clavier, mais j'ai besoin que les deux focus restent sur le contrôle A, mais dans certains cas, acheminez son événement entrant vers d'autres contrôles.

+0

Ne pouvez-vous pas simplement faire vos événements clés pour le contrôle A faire une vérification et si nécessaire appeler les événements clés pour le contrôle B? – Relster

+0

Non! Cela ne déclencherait pas l'événement, il n'appellerait qu'une seule fonction spécifique qui était autrefois associée à l'événement click du bouton. Je veux simuler l'événement réel que WPF envoie. –

+0

@Elazar - Voir ma modification. Est-ce que la méthode 'RaiseEvent()' fonctionnerait à la place? – Donut

Répondre

4

Ne pourriez-vous faire quelque chose comme ça?

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
    // Check if the event needs to be passed to button2's handler 
    if (conditionIsMet) 
    { 
     // Send the event to button2 
     button2.RaiseEvent(e); 
    } 
    else 
    { 
     // button1's "Click" code 
    } 
    } 

    private void button2_Click(object sender, RoutedEventArgs e) 
    { 
    // button2's "Click" code 
    } 

Edit: Code modifié pour utiliser la méthode RaiseEvent() pour élever un programme événement spécifique, plutôt que d'appeler le gestionnaire d'événements pour button2.

+0

Non! Cela ne déclencherait pas l'événement, il n'appellerait qu'une seule fonction spécifique qui était autrefois associée à l'événement click du bouton. Je veux simuler l'événement réel que WPF envoie. –

+0

C'est ce que je cherchais! –

+0

Je me demande pourquoi ça s'appelle relancer les événements. J'ai googlé pour un événement de feu et invoque un événement et un événement déclencheur mais sans résultat ... –

Questions connexes