2010-08-11 14 views
13

¿Existe una forma práctica para que evolucionemos lentamente una aplicación WinForms a WPF sin crear una pesadilla de soporte para nosotros mismos con escenarios de interoperabilidad extraños?WinForms a WPF - ¿Cómo llegar desde aquí?

información Antecedentes:

Tenemos una aplicación de Windows Forms acorazado gris grande que está muy utilizada por un grupo interno de alrededor de 60-75 usuarios. Estamos comenzando a toparnos con lugares donde podríamos ver algún beneficio de tener la aplicación en WPF, pero no es suficiente para justificar un proyecto grande para reescribirlo por completo. Todas las pantallas de la aplicación son controles de usuario autónomos de WinForms y la aplicación WinForms es simplemente un shell que maneja el menú, abre/cierra formularios, proporciona algunos métodos de ayuda compartidos, etc ...

Hasta ahora, el mejor idea que hemos tenido es convertir la aplicación de shell a WPF y luego alojar los controles de usuario de WinForms dentro de ella. Pensamos que podríamos convertir los controles de usuario a lo largo del tiempo, vinculando esos cambios a las iniciativas que tienen suficiente valor comercial para respaldar el trabajo adicional. Me preocupa qué tan bien funciona la interoperabilidad y cómo afectará el rendimiento. También me preocupa cómo hacemos la transición a un nuevo aspecto para la aplicación. Parecería extraño hacer que la aplicación de shell se vea elegante y luego tener viejos controles de usuario grises acorazados alojados dentro de ella y también parece extraño crear la aplicación de shell en WPF y hacer que se vea como lo hizo en WinForms.

Si uno de los sistemas Caliburn, Prism u otro marco similar facilitaría la transición, estaríamos dispuestos a explorar esas opciones también.

Respuesta

11

Estábamos en una situación similar y elegimos la siguiente ruta: Al principio comenzamos a alojar algunas ventanas de WPF en el shell de la aplicación (todavía WinForms). Por supuesto, hubo alguna diferencia visible, pero redujimos la diferencia deliberadamente atenuando las nuevas ventanas. Supusimos que para cuando convirtiéramos las ventanas/controles restantes sería más fácil "actualizar" a una experiencia más vívida ya que la interfaz de usuario será completamente WPF y podemos involucrar a un diseñador gráfico para que trabaje su magia basada en XAML.

Ahora hemos llegado al punto en que la mayoría de las ventanas son WPF. Hemos comenzado el proceso de convertir la aplicación de shell de WinForms en una aplicación de shell basada en WPF que aloja los WinForms restantes. Todavía tenemos colores apagados pero los usuarios han comenzado a notar la diferencia y, aunque es pequeña, a nuestros usuarios todavía les gusta el cambio positivo incremental. No demasiado tiempo y retiraremos el último WinForm. ¡Ese será el momento en que dejemos a nuestros diseñadores gráficos sin correa!

En cuanto al rendimiento: ciertamente no puedo hacer una declaración general, ya que depende en gran medida de sus controles/ventanas particulares. En nuestro producto (varios cientos de ventanas) no hemos encontrado ningún problema de rendimiento significativo relacionado con la combinación de WPF y WinForms.

No miramos en ninguno de los marcos, así que me temo que no puedo comentar sobre eso.

+1

+1 Esto describe mis propias experiencias muy bien. Además, aquí hay una sesión interesante de PDC sobre cómo se implementó Visual Studio 2010 con la interoperabilidad NET Framework 4: http://microsoftpdc.com/2009/CL09 –

+1

No estoy seguro de que haya una respuesta "correcta" para esto, pero Creo que este es el enfoque que más probablemente terminemos tomando. –

+0

y en todo este esfuerzo, pagado por el negocio, ¿brindó alguna nueva funcionalidad útil a los usuarios finales, o simplemente lo pasaron muy bien haciéndolo muy llamativo? – smirkingman

4

Una gran pregunta, en la actualidad, la mayor parte del trabajo en WPF se ocupa de la conversión de la vieja aplicación WinForms a WPF. Desde mi experiencia, el mejor de los casos es construir la aplicación desde cero en función de las aplicaciones/requisitos anteriores. Afortunadamente, he sido parte de un proyecto en el que hemos vuelto a escribir la aplicación desde cero y estoy seguro de que tomó menos tiempo/inversión y luego mezcló los dos.

Personalmente creo que habría creado un desastre si hubiéramos intentado mezclar los dos. Otro punto es que será difícil diseñar la aplicación mixta de manera eficiente.

En mi proyecto actual (que es un gran proyecto que se ejecuta en los últimos 10 años) estamos convirtiendo la aplicación módulo por módulo. Afortunadamente para nosotros, nuestra aplicación consiste en varias aplicaciones más pequeñas, por lo que convertirlas una a una es más fácil. En su caso, diría que identifique las áreas que pueden ser totalmente convertidos en WPF y empezar a construir en WPF, como se sugiere aquí -

Windows Forms - WPF Interoperabilidad FAQ: http://windowsclient.net/learn/integration.aspx

Me gustaría también sugieren usar algunas herramientas para convertir los formularios de Windows a XAML (WPF); eso seguramente te ayudará a ahorrar tiempo.

Windows Forms al convertidor de WPF: http://wf2wpf.codeplex.com/

Windows Forms a XAML Convertidor: http://www.ingeniumsoft.com/Products/WinForm2XAML/tabid/63/language/en-US/Default.aspx

Windows Forms a Windows Presentation Foundation Convertidor: http://www.spiderwan.com/spiderwan/ConvertWinFormToWPF/WinFormToWPF.aspx

+1

En general, prefiero el enfoque de conversión incremental descrito por John, pero estoy de acuerdo en que hay momentos en los que tiene sentido reescribir los requisitos originales. Sin embargo, estoy totalmente en desacuerdo con que Paul G mire las herramientas de conversión de Windows Forms a WPF: quienes usan esas herramientas invariablemente terminan con una aplicación que es aún más difícil de mantener que la aplicación Winforms. Hecho correctamente, las aplicaciones WPF son mucho más sencillas y fáciles de mantener que las formas Winforms equivalentes. El tiempo dedicado a la creación de modelos de vista de calidad y XAML se amortizará diez veces, especialmente al hacer una reescritura. –

+0

Toma de punto, el diseño de modelos de vista y XAML usted mismo será siempre mejor. Solo quería que Paul conociera las opciones disponibles (por supuesto, para ahorrar tiempo). – akjoshi

Cuestiones relacionadas