2011-05-03 12 views
6

Un formulario WPF que ejecuto desde una ventana de WinForms apareció con todos los cuadros de texto como no editable cuando se inició como un cuadro de diálogo no modal. Usé ElementHost.EnableModelessKeyboardInterop para abordar el problema & funcionó allí.WPF cuadro de diálogo no modal desde el complemento MS Excel

También estoy abriendo la misma interfaz de usuario de WPF desde un MS Excel como un complemento. El truco EnableModelessKeyboardInterop no funciona allí. Cada vez que trato de editar mi cuadro de texto WPF, el foco cambia a Excel y la entrada de teclado se representa en Excel en lugar de en mi cuadro de texto WPF. ¿Alguna idea sobre cómo solucionar este problema?

P.S. - Esta es una continuación de mi pregunta anterior sobre SO: WPF modeless dialog renders textbox uneditable

Respuesta

7

lo resolvió, por cortesía de este enlace: Running WPF Application with Multiple UI Threads

  var thread = new Thread(() => 
      { 
       var wpfWindow = new WPFWindow(); 
       wpfWindow.Show(); 
       wpfWindow.Closed += (sender2, e2) => wpfWindow.Dispatcher.InvokeShutdown(); 

       Dispatcher.Run(); 
      }); 

      thread.SetApartmentState(ApartmentState.STA); 
      thread.Start(); 
+1

'EnableModelessKeyboardInterop' de hecho no funciona cuando se muestran las ventanas no modales WPF desde Excel. Para poder reutilizar este código, creé un método estático genérico que se puede llamar para cualquier ventana de WPF. También probé métodos de extensión, pero la instancia de la ventana de WPF _debe_ crearse en el delegado de inicio de subprocesos; con un método de extensión, ya se habría creado una instancia. – bovender

Cuestiones relacionadas