2010-06-30 10 views
10

¿Es posible tener un proyecto que contenga tanto Winforms como WPF?¿Es posible tener un proyecto que contenga tanto Winforms como WPF?

Decir un proyecto de WinForm que se transforma paso a paso (formulario por formulario) en uno de WPF, ¿será posible tener una apertura de Winform en un botón, y un WPF que se abre en otro botón?

+1

u puede dar un mejor título para este modo que aparezca mejor en los resultados de búsqueda (tal vez copiar primera línea :)) –

Respuesta

14

Sí. Debe elegir una tecnología para mostrar cada ventana física y controlar en su aplicación, pero no hay ninguna razón por la que no pueda mezclar y combinar.

Por ejemplo:

  • ventana A WinForms puede mostrar una ventana de WPF.
  • Una ventana de WPF puede mostrar una ventana de WinForms.
  • Una ventana de WinForms puede contener contenido WPF (consulte el control ElementHost).
  • Una ventana WPF puede contener controles WinForms (vea el control WindowsFormsHost).
+0

más uno para señalar todas las combinaciones de mezcla de WPF/WinForms –

0

No veo ninguna objeción para hacer eso. (Tengo en WinForms Application WPF windows) Muchos de los ejemplos utilizan MessageBox.Show que es parte de Windows.Forms. Por supuesto, debe volver a escribir todas las ventanas, no solo los controles.

+0

por lo que en un proyecto es posible tener una abertura Winform en un botón, y una WPF abriendo en otro botón? – serhio

+1

Sin embargo, se vuelve difícil si tiene una aplicación MDI, ya que la ventana WPF no expone una propiedad "MdiParent". – Robaticus

1

Lo que usted podría estar buscando es el control ElementHost. Lo que te permite hacer es tomar contenido de WPF y alojarlo en una ventana de Windows Forms. Más detalles aquí:

http://msdn.microsoft.com/en-us/library/ms745781.aspx

También hay un control que le permite hacer lo inverso: host de Windows Forms contenido desde dentro de WPF:

http://nayyeri.net/host-windows-forms-controls-in-wpf

Entre los dos, puede mover la 'línea divisoria' entre WPF y Windows Forms con cierto grado de flexibilidad.

Hay una advertencia que deberá tener en cuenta. Windows Forms funciona internamente en términos de HWND ... una ventana administrada por el administrador de ventanas de Windows heredado (que maneja el orden z). WPF no hace esto ... Un árbol WPF típicamente se procesa en un solo HWND ', y es WPF el que maneja cosas como el orden z. Lo que esto significa para usted es que el orden z no siempre funciona de la manera que esperaba, y hay cosas que no puede hacer con los controles de Windows Forms alojados que puede hacer con los elementos tradicionales de WPF. (De hecho, hay una manera de resolver esto, pero implica convertir HWND periódicamente en un mapa de bits de memoria, renderizar ese mapa de bits en una superficie WPF y luego redirigir eventos dirigidos a la superficie WPF al HWND subyacente. Esto es poderoso, pero complicado y difícil de hacer bien.)

1

Agregar Winforms a los proyectos de WPF se puede hacer sin problemas (directamente desde el menú "Agregar nuevo elemento"), pero no hay una opción directa para agregar una ventana de WPF a un proyecto de Winforms.Aún así, he manejado para hacerlo siguiendo estos pasos:

  1. Añadir un control de usuario de WPF (esta opción está disponible en el "Añadir nuevo elemento " menú) y luego convertirlo en una ventana de WPF. Modifique XAML cambiando la etiqueta primaria UserControl a Window y elimine la herencia de UserControl (todo esto se explica en this link).

  2. Agregue una referencia a System.Xaml.dll. Ver this link.

  3. Agregue una referencia a System.Windows.dll (lo encontré en mi computadora en esta ruta: C: \ Archivos de programa (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5. Tenga en cuenta que podría ser diferente en el tuyo). Ver this link.

+1

Pude agregar WPF Windows a un proyecto de Winform cambiando el archivo de manifiesto del proyecto como se describe aquí: http://stackoverflow.com/questions/8311956/open-wpf- ventana en windowsform-app/32691690 # 32691690 –

Cuestiones relacionadas