2010-12-03 18 views
7

Tengo una aplicación Winforms que usa un control WPF (Avalon Edit si importa) dentro de ElementHost.Eventos WPF en Winforms

Parece que funciona bien, pero me gustaría poder manejar los eventos KeyPress de este control de la manera Winforms (sin RoutedCommands y InputGestures), así que pensé que podría manejar el evento KeyDown del formulario con el conjunto KeyPreview , pero los eventos de WPF no parecen burbujear hasta la Forma.

Entonces, básicamente, ¿cómo se puede acceder a un evento KeyDown en un control WPF en la forma Winforms?

Respuesta

6

Puede intentar agregar un controlador de eventos personalizado para WpfControl, en lugar de intentar conectarse al KeyDown de WinForm.

Aquí hay un ejemplo. Digamos: su WinForm es del tipo Form1, WpfControl es UserControl1, y el elemento host para WpfControl se llama (nunca lo adivinará)) - 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 es System.Windows.Input.KeyEventArgs) almacena información sobre Ctrl, Alt, etc.

+0

El problema es que en realidad no System.Windows.Input.KeyEventArgs exponga las teclas de modificación, por lo que puede 't comprobar para' Ctrl + Z ', solo' Z 'o' Ctrl '. Incluso la propiedad Key no es una combinación bit a bit de modificador y clave de lo que he visto, solo es presionada la tecla principal. – Miguel

+0

@Miguel, mira la actualización: e.KeyboardDevice.Modifiers es lo que necesitas. –

+0

Oh, gracias por eso, nunca lo hubiera solucionado. Upvoted. – Miguel

Cuestiones relacionadas