2010-11-12 12 views
13

Tengo cuadro de texto dentro de un control de usuario y añadir el control de usuario al MainWindow con la siguiente XAML:WPF cuadro de texto no toma de entrada, el espacio y la tecla de retroceso funciona

<Views:MyUserControl /> 

Tengo un cuadro de texto en MyUserControl, el problema es que el TextBox no toma ninguna entrada. El espacio de retroceso y el espacio funciona, pero si presiono la letra de los números, no se agrega texto al cuadro de texto.

Me he asegurado de que el texto no esté solo oculto en el TextBox. También he intentado agregar un RichTextBox a MyUserControl con el mismo resultado, no toma ninguna entrada (al lado del espacio o espacio de retroceso).

También he intentado agregar un TextBox a MainWindow con el mismo resultado; no toma ninguna entrada (al lado del espacio o retroceso).

También MyUserControl se agrega en un TabControl y TabItem.

¿Alguna pista?

Editar: Información adicional Olvidé escribir que estoy abriendo/creando la ventana WPF desde una aplicación WinForm. Cuando configuro mi proyecto de inicio en VS10 para que sea mi proyecto WPF, funciona muy bien con la entrada del teclado al TextBox.

¿Cómo es que?

Im apertura/creación de mis ventanas de WPF con el siguiente código:

MyWpfProject.MainWindow mw = new MyWpfProject.MainWindow(); 
mw.Show(); 

Editar: Solución Así que supongo que mi verdadero problema era que es fue abrir el proyecto WPF desde una aplicación de Windows Forms.

I añade el siguiente código:

MyWpfProject.MainWindow mw = new MyWpfProject.MainWindow(); 
ElementHost.EnableModelessKeyboardInterop(mw); 
mw.Show(); 

"El EnableModelessKeyboardInterop() es necesario para manejar la entrada de teclado en la ventana de WPF si carga desde un huésped no WPF como WinForms." http://weblogs.asp.net/jdanforth/archive/2008/07/29/open-a-wpf-window-from-winforms.aspx

+0

Muéstranos las fuentes (Marcado y código detrás si es necesario) – Falcon

+0

Intenté reproducir el problema en un proyecto más pequeño, sin éxito. ¿Hay un montón de código, alguna parte particular del código fuente que te interese? – Felix

+0

Ver información adicional en mi pregunta – Felix

Respuesta

30

respuesta a mi propia pregunta (si otra persona ejecute en el mismo problema): Si abre un WPF-formulario desde una aplicación de Windows Forms que tiene que hacer lo siguiente para obtener la entrada del teclado:

MyWpfProject.MainWindow mw = new MyWpfProject.MainWindow(); 
ElementHost.EnableModelessKeyboardInterop(mw); 
mw.Show(); 

"La llamada EnableModelessKeyboardInterop() es necesaria para manejar la entrada del teclado en la ventana WPF si se carga desde un host que no es WPF como WinForms". http://weblogs.asp.net/jdanforth/archive/2008/07/29/open-a-wpf-window-from-winforms.aspx

+3

No olvides agregar WindowsFormsIntegration.dll como referencia. –

1

¿Tal vez su control de usuario está recibiendo el evento de teclado en lugar de su cuadro de texto? Intente buscar de esta manera, sucede con los botones del mouse.

+0

Agregué un evento en la tecla de acceso a mi control de usuario y el cuadro de texto, ambos eventos se golpean cuando presiono una tecla. ¿Qué me dice eso? – Felix

+0

muestra el código? – kite

+0

Intenté reproducir el problema en un proyecto más pequeño, sin éxito. ¿Hay un montón de código, alguna parte particular del código fuente que te interese? – Felix

1

Tuve el mismo problema pero mi entorno se creó de forma tal que no pude aplicar la solución anterior. Resultó que ese no era el problema. Fue mucho más fácil de lo esperado.

Tengo un control de usuario WPF dentro de WinForms. Mi WinForms MainView (formulario de inicio) anuló el "ProcessCmdKey". Debido a errores lógicos, no devolvió nada.

Sin embargo, recibí todos los eventos clave del código en mi archivo XAML pero estos eventos nunca actualizaron el "Texto" de mi cuadro de texto. Solo el espacio y el revés lo hicieron y estos fueron los eventos clave que no recibí en el código.

Así que en caso de que no piense en la solución más simple, aquí está para VB.NET.

STRG + F "ProcessCmdKey" y asegúrese de que devuelve el valor correcto de usted puede descomentarlo completamente solo para verificar que no le esté causando el mismo problema que a mí.

Cuestiones relacionadas