2010-12-03 28 views
7

J'ai une application Winforms qui utilise un contrôle WPF (Avalon Edit si c'est important) dans un ElementHost. Cela semble fonctionner correctement, mais j'aimerais pouvoir gérer les événements KeyPress de ce contrôle de la manière de Winforms (sans RoutedCommands et InputGestures), donc je pourrais simplement gérer l'événement KeyDown du Form avec l'ensemble KeyPreview , mais les événements WPF ne semblent pas apparaître dans le formulaire.Événements WPF sous Winforms

Donc, fondamentalement, comment pouvez-vous accéder à un événement KeyDown sur un contrôle WPF à la manière de Winforms?

Répondre

6

Vous pouvez essayer d'ajouter un gestionnaire d'événements personnalisé pour WpfControl lui-même, au lieu d'essayer de vous connecter à KeyDown de WinForm.

Voici un exemple. Disons: votre WinForm est de type Form1, WpfControl est UserControl1, et l'élément host pour WpfControl est appelé (ne devinera jamais)) - elementHost.

public Form1() 
{ 
    InitializeComponent(); 
    elementHost.ChildChanged += ElementHost_ChildChanged; 
} 

private void ElementHost_ChildChanged(object sender, ChildChangedEventArgs e) 
{ 
    var ctr = (elementHost.Child as UserControl1); 
    if (ctr == null) 
     return; 
    ctr.KeyDown += ctr_KeyDown; 
} 

void ctr_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
{ 
    /* your custom handling for key-presses */ 
} 

UPD: e.KeyboardDevice.Modifiers (e est System.Windows.Input.KeyEventArgs) stocke les informations sur les touches Ctrl, Alt, etc.

+0

Le problème est que System.Windows.Input.KeyEventArgs n'expose pas réellement les touches de modification, de sorte que vous pouvez Ne vérifiez pas 'Ctrl + Z', seulement 'Z' ou 'Ctrl'. Même la propriété Key n'est pas une combinaison bit à bit de modificateur et de clé d'après ce que j'ai vu, c'est juste la touche principale enfoncée. – Miguel

+0

@Miguel, Voir mise à jour: e.KeyboardDevice.Modifiers est ce dont vous avez besoin. –

+0

Oh, merci pour cela, je ne l'aurais jamais compris. Upvoted. – Miguel