2009-12-16 12 views
25

Es hora de escribir la GUI para mi proyecto, y me pregunto qué tecnología usar. Hice la mayor parte de mi desarrollo de .NET GUI en .NET 1 & 2, así que sé Windows Forms razonablemente bien. Estoy vagamente enterado de WPF, pero aún no he intentado "entrar en él".¿Son viejas tecnologías de Windows Forms?

¿Las formas de Windows están muertas o agonizando? ¿WPF es una buena tecnología para aprender? ¿Es el futuro, solo una fase o una tecnología que puede ir de la mano junto con Windows Forms?

Además, cualquier experiencia será buena para escuchar, especialmente de personas que han usado tanto. ¿Cómo encontraste la implementación de una característica similar en ambos frameworks?

Respuesta

43

¿WinForms está muerto o agonizando?

No. No se desarrolla significativamente más (es decir, no hay nuevos principales adiciones), pero es totalmente compatible en .NET 4, por ejemplo.

¿Es WPF una buena tecnología para aprender?

Sí.

¿Es el futuro, solo una fase o una tecnología que puede ir de la mano junto con WinForms?

Se pretende que el tiempo se trasladaría a WPF, pero también se entiende que existen grandes bases de código existentes escritos en WinForms, y no hay caso de negocio para volver a escribir en WPF. Por lo tanto, WinForms sigue siendo compatible.

Además, cualquier experiencia será buena para escuchar, especialmente de personas que han usado ambas cosas extensamente. ¿Cómo encontraste la implementación de una característica similar en ambos frameworks?

En términos generales, WPF es mucho más expresivo. Si nos fijamos en los marcos como un conjunto de ladrillos Lego que se pueden juntar de varias maneras, los ladrillos WinForms son mucho más grandes, cada uno hace mucho, y por lo tanto hay menos formas de unirlos. Muy a menudo, cuando necesita algo, pero no exactamente, como lo hace un ladrillo existente, tiene que escribir el suyo desde cero. En WPF, los ladrillos son significativamente más pequeños y se pueden combinar de muchas maneras interesantes e incluso sorprendentes.

Para un ejemplo concreto, considere cómo WPF Button es un contenedor que puede albergar contenido arbitrario, no solo imágenes + texto como en WinForms, sino cualquier otro control o conjunto de controles de WPF.

WPF también es mucho más fácil de escribir diseños dinámicos en comparación con WinForms. Este último también tiene diseños, pero el problema es que son un PITA real para trabajar con el diseñador visual, y escribir la inicialización del componente WinForms por código es muy tedioso. Con WPF, simplemente escribe el marcado XAML a mano, y los diseños (y los árboles de control en general) se representan de forma muy natural en XML.

Partiendo parcialmente de lo anterior, me parece que WPF es más fácil de localizar. Por un lado, es porque realmente necesita diseños dinámicos para localizabilidad (ya que no conoce de antemano la longitud de las cadenas en todas las configuraciones regionales). La solución de WinForms para esto es considerar no solo las etiquetas de texto, sino también la posición y el tamaño de control, como "propiedad localizable", por lo que se supone que el traductor reorganizará los controles en el formulario si encuentra que las cadenas no encajan. En WPF, los diseños dinámicos son el enfoque predeterminado, por lo que el localizador solo trata con cadenas.

El marco de enlace de WPF es bastante potente (incluso si es detallado, gracias a la falta de conversores en línea), y promueve en gran medida el MVP y, en general, la separación de modelo/vista. Esto es posible de lograr con WinForms en 2.0+, y trato de hacer eso allí también, pero es más tedioso, especialmente con respecto a la manipulación nula, y en ocasiones puede ser rather buggy.

Un punto de dolor particular es la forma en que el diseñador de WinForms interactúa con el control de origen. Hay dos problemas similares aquí. En primer lugar, el diseñador serializa el formulario editado como código, y en ocasiones cambios muy pequeños en el diseño pueden hacer que el diseñador genere un código completamente diferente (esto se nota especialmente si edita barras de herramientas) porque mezcla las líneas de código, es decir, en realidad valor de propiedad individual en una línea, pero también reordenó todo. Esto lleva a mucho ruido en la historia (es casi imposible decir qué fue exactamente cambiado cuando se observan los diffs), pero lo más importante es que la fusión de dichos archivos es un gran dolor de cabeza. Esto generalmente ocurre cuando dos personas trabajan con el mismo formulario al mismo tiempo, y luego uno comete sus cambios, y el otro intenta comprometerse, descubre que el archivo fue cambiado mientras tanto, intenta fusionarse, ve los diffs, y salta fuera de la ventana más cercana.

Un problema muy similar ocurre cuando se utilizan formularios localizables de WinForms, que empuja algunas propiedades a un archivo de recursos. Una vez más, al diseñador le gusta reordenar los valores de las propiedades en el archivo de recursos para cualquier cambio trivial, con los mismos problemas que se describieron anteriormente.

Ahora en cuanto a las deficiencias en WPF. Uno de los más importantes es que es bastante más complicado y puede que no le resulte familiar a alguien con experiencia solo en WinForms, VCL, VB u otros marcos "tradicionales" similares. Otro problema es que la documentación, en mi opinión, no es perfecta; por lo general ofrece una visión decente, pero rara vez cubre casos de esquina, algunos de los cuales pueden ser bastante importantes. Este es también el caso de WinForms, pero hay menos combinaciones posibles allí, por lo que también hay menos casos de esquina.

También está la cuestión de los componentes de terceros. WinForms había existido por mucho tiempo, y hay muchos disponibles, y muchos de ellos son muy maduros. WPF es comparativamente joven y todavía sufre dolores de crecimiento, al igual que la mayoría de las soluciones de terceros.

Una de mis preocupaciones favoritas en WPF es la forma en que antialiases el texto, que se percibe como de calidad mucho peor en comparación con ClearType de Windows por la mayoría de las personas, especialmente en tamaños de letra pequeños; vea this bug report para más información. Esto se soluciona en WPF 4, pero aún no se ha lanzado, e incluso cuando lo sea, es probable que desee seguir con el comprobado 3.5 SP1 durante un tiempo; y la solución no se transfiere.

+2

¡Gracias! Esta es la respuesta perfecta, exactamente el tipo de información que estaba buscando. Me gustó tu analogía de lego-brick. Intenté ignorar WPF, pero los comentarios aquí me han convencido de que es hora de comenzar a aprender. – DanDan

+7

Como nota al margen, una buena señal de madurez de una determinada tecnología de MS es si MS utiliza esa tecnología. Al escribir estas líneas, hay un producto principal de MS que usa WPF exclusivamente: Expression Blend, y uno de los próximos productos principales que usa mucho WPF, y lo usa solo para cualquier UI nueva, dejando WinForms y Win32 nativo para algunos bits heredados. - VS2010. Entre otras cosas, significa que cualquier deficiencia de WPF que afecte negativamente esos productos recibirá mucha atención. Sé que hubo bastantes soluciones WPF para .NET 4 debido al uso de VS2010 :) –

+0

VS2010 fue codificado en WPF, y se muestra por cierto que se ve en comparación con 2008, pero la última vez que lo probé fue con errores y tenía colores feos :) –

1

Ciertamente no.

Las formas de ganar son más fáciles de usar (Teniendo en cuenta que aún no conoce WPF) y WPF es una gran desviación del modelo de Winforms.

Si desea una GUI simple (material estándar) vaya con Winforms. Si quieres algo un poco más llamativo y tienes tiempo, ve a WPF.

Estoy seguro de que llegará el momento en que WPF sea el estándar de facto. Pero por ahora, me quedo con Winforms si quiero algo rápido y limpio.

Vale la pena mencionar que muchas aplicaciones ya están utilizando Winforms, lo que significa que a menudo se producen trabajos de mantenimiento que involucran a WinForms, por lo que aún no lo rito.

+0

Gracias - este es mi proyecto sin restricciones, pero bastante simple, por lo que esta puede ser la oportunidad ideal para comenzar en el camino hacia WPF. – DanDan

+0

Tenga en cuenta que la "GUI estándar" puede ser aún más fácil de hacer en WPF, si insiste en hacer las cosas bien y separando estrictamente el modelo y la vista (por ejemplo, aplicando MVP). –

+0

Independientemente de lo que ocurra, MVP (o la variante MVVP para WPF) es imprescindible para el código desacoplado. – Finglas

10

WinForms no están muertos o agonizando ... simplemente no pueden proporcionar la misma experiencia de usuario que WPF (sin MUCHO trabajo). Son solo una tecnología más antigua.

WPF es una buena tecnología para aprender. Proporciona la capacidad de proporcionar una experiencia de usuario mucho más rica con menos trabajo.

El modelo para trabajar con WPF es definitivamente diferente de WinForms. He usado ambos (WinForms en mayor medida que WPF/Silverlight) y las transiciones más difíciles para mí fueron:

  1. XAML, que no es tan malo si tiene experiencia con otro lenguaje de marcas como MXML.

  2. DataBinding

  3. interfaz de eventos (efectos MouseOver, plazos, etc.) Manejo

+0

De los comentarios aquí sé que entiendo que WPF no es solo otro tipo de WinForms, da más que eso. ¡Parece que vale la pena dedicarle algo de tiempo! – DanDan

3

WinForms está lejos de estar muerto/morir. WPF es simplemente una forma más nueva de abordar la interfaz de usuario, ya que promueve cosas que eran más difíciles en WinForms. Cosas como separar el modelo detrás de la interfaz de usuario de la interfaz de usuario real para que pueda ser probado fácilmente es un factor importante.

Definitivamente vale la pena aprenderlo, pero asegúrese de aprender "la manera WPF" de crear las pantallas en lugar de simplemente integrar su WinForms-way en ella. Es una forma diferente de codificación.

+0

Gracias por la información. ¿Tiene algún buen enlace/recomendaciones de libros para aprender "el camino de WPF"? – DanDan

+1

@DanDan: el mejor recurso en línea gratuito que he visto es el sitio web del Dr. WPF en http://drwpf.com/blog/. Revisa ItemsControl A-Z! El mejor libro para mí, aunque también es uno de los más antiguos, es el WPF de Adam Nathan, publicado por Sams Publishing. HTH – Berryl

+0

@Berryl - Un buen enlace, ¡buen descubrimiento! – DanDan

1

WinForms no está muerto. Google "crea puestos de trabajo C#" y encontrará mucho. WPF es lo más popular, pero aún es relativamente nuevo. No será la corriente principal por otros dos o tres años en mi humilde opinión.

+0

Pero parece que se convertirá en la corriente principal? Entonces, tendré que aprenderlo tarde o temprano, parece :) – DanDan

+2

Quédese en el espacio de escritorio/cliente grueso el tiempo suficiente y sí, definitivamente tendrá que aprender WPF. –

2

WinForms probablemente estará por mucho tiempo en entornos corporativos. Funcionan bastante bien para muchos propósitos.Muchos proyectos se basan en WinForms, y muchas empresas se quedarán con esa tecnología durante la duración de los proyectos en lugar de combinarlos.

Habiendo dicho eso, WPF es el futuro. Es una tecnología UI mucho más eficiente, mucho más capaz y bien vale la pena aprender.

WinForms y WPF pueden coexistir en una sola aplicación. Esa será probablemente la forma más común para que se les presente a una empresa (eso y pequeños proyectos de prueba de concepto).

+0

El acuerdo general aquí parece ser que WPF será el futuro y una herramienta fundamental para el desarrollador de .NET. ¡Gracias por tus comentarios! – DanDan

1

Aquí hay una buena blog post sobre WinForms y WPF. La idea general es elegir sabiamente, lo que significa que no hay uno que gane sobre el otro. Cada uno tiene un subconjunto diferente de características.

Tomar la decisión entre WPF y WinForms es una historia diferente. Claro, WPF es el nuevo hotness y WinForms es viejo y roto pero ¿es la elección correcta? Obviamente "depende" de la situación y Microsoft continúa entregando y admitiendo WinForms para que no desaparezca pronto. Entonces, ¿cuáles son los factores convincentes para elegir WPF sobre WinForms? Karl insinúa las opciones de WPF sobre WinForms en su serie WPF Business Application, pero las razones pueden ser sutiles para algunos.

Personalmente prefiero WPF porque comencé como desarrollador web y encuentro que el marcado XAML es más natural.

+0

Gracias, gran artículo. – DanDan

1

Creo que definitivamente vale la pena aprender WPF antes de que sea más convencional, siempre es bueno mejorar tus habilidades y tener experiencia y conocimiento de nuevas tecnologías es siempre una ventaja, especialmente si WPF se va a usar más ampliamente en el futuro.

Además, aunque escribir xall mark-up es muy diferente a la creación de formularios, no está a un millón de kilómetros de escribir html y probablemente no sea demasiado lejos para usted si ha realizado algún desarrollo web.

Si bien WinForms es una tecnología más antigua que no significa que vaya a desaparecer, todavía tenemos aplicaciones en las que trabajo escritas en VB6. Solo la mitad de nuestro departamento de desarrollo trabaja con .NET, estamos divididos en 3 equipos, un equipo todavía usa .NET 1.1, otro equipo usa .NET 2 y el equipo en el que estoy usando .NET 3.5 (podría dicen que somos los afortunados!)

+0

Estoy en el proceso de aprender WPF en este momento. Quizás finalmente esté al día con la tecnología .NET 3.5 ... ¡probablemente el día antes de que salga .NET 4.0! – DanDan

+0

¡Es mejor tener una ventaja inicial! Siempre puedes tratar de saltar de .NET 2 directamente a 4.0, pero como 3.5 está por aquí ahora también puedes empezar a aprender ahora en lugar de esperar hasta que haya más para entender :-) – TabbyCool

1

Comenzamos a utilizar WPF para un nuevo proyecto y francamente, es difícil volver a WinForms. Un montón de cosas ordenadas que ya no puedo soportar.

Sin embargo, una palabra de consejo. Aunque puede hacer un diseño mucho más complejo con WPF (como se menciona, un botón o casi cualquier cosa, puede alojar otras cosas como imágenes, cuadros de texto e incluso más), algunas otras cosas 'básicas' encontradas en WinForm son difíciles de reproducir . Ejemplo: Antes de que saliera el kit de herramientas de WPF, WPF no tenía datagrids ni selector de fecha y hora, por lo que tenía que hacerlo usted mismo. Además, todavía no tiene MaskTextBox, tiene que hacerlo usted mismo o descargarlo de terceros. El último que encontré y que realmente encuentro anotaciones es con Treeview: las líneas entre hojas y padres no se muestran.

Dicho esto, sigue siendo mucho mejor que WinForm en la mayoría de los aspectos.

+0

Solo he gastado un par de días en él, y me está atrayendo. No sé lo que me llevó tanto tiempo dar el paso. – DanDan

1

de empezar a utilizar WPF en un nuevo proyecto que tenemos

la nueva aplicación incluye una gran cantidad de código heredado en Windows Forms.

siempre que queramos usar el diálogo anterior de winforms es posible.

Cuando utiliza getrina para WPF, realmente no desea volver a las formas de ganar. es mucho más fácil hacer cosas de GUI que te llevarían mucho tiempo en winforms.

en cualquier forma que tome un tiempo aprender cosas y poder usar todas sus capacidades (no solo la interfaz de usuario sino también el enlace de datos y comandos pattens).

teniendo somone experimentado que puede ayudar con la primera arquitectura puede ser muy útil.

+0

Tengo un buen libro y desbordamiento de pila para ayudarme :) – DanDan

+0

no hay problema. solo reduce los riesgos del cronograma. buena suerte :) – tal

2

Perspectiva desde 2016:

yo no abogan a menudo campanadas en una pregunta a este viejo, pero pensado un epílogo puede ser apropiado en este caso. ¿Por qué? Porque incluso ahora (2016), oigo a los desarrolladores en entornos corporativos todavía haciendo esta pregunta.

Sí, siete años después, WinForms sigue vivo en entornos corporativos, y todavía es compatible con Microsoft. Google Trends muestra un descenso lento y constante en el interés desde mediados de 2005, con un interés actual de alrededor de un tercio de 2005.

WPF causó sensación en 2009, pero nunca se convirtió en el estándar de facto para el desarrollo de una nueva interfaz de usuario. Tendencias de Google muestra que el interés de WPF alcanzó su máximo desde 2009-2011, y luego disminuyó más rápido que WinForms.El interés de búsqueda actual es aproximadamente la mitad del de 2011, pero sigue siendo casi el doble del interés de búsqueda actual de WinForms.

¿Qué están usando ahora los desarrolladores? Las IU basadas en la web se han expandido en popularidad, en gran parte debido al aumento de la navegación móvil. Podría discutir sobre la mejor manera de escribir una IU web (AngularJS + WebAPI? ASP.NET MVC? Reaccionar? Todos apuntan hacia arriba en Google Trends). Independientemente de la tecnología que utilice, es difícil negar el atractivo de escribir una interfaz de usuario (receptiva) una vez y hacer que funcione en casi todos los dispositivos y plataformas. Los servicios de alojamiento en la nube impulsaron el empuje hacia la web al ofrecer escalas prácticamente instantáneas/infinitas con una inversión inicial en infraestructura baja.

Así que hoy, recomiendo encarecidamente avanzar hacia una interfaz de usuario web, ya que puede mejorar la vida útil de la aplicación, que a menudo debe durar mucho tiempo en entornos corporativos. Alternativamente, si usted es un desarrollador basado en Microsoft que está desarrollando dispositivos móviles, vale la pena echarle un vistazo a Xamarin.

+1

Sí - completamente de acuerdo. Si estuviera haciendo un proyecto favorito ahora, solo usaría WinForms porque es realmente fácil. Cualquier cosa más compleja y de mayor duración probablemente debería ir basada en la interfaz de usuario web como una primera idea. Cualquier cosa que necesite potencia/seguridad de escritorio (que no es una gran parte de los programas) probablemente debería verse en plataformas cruzadas en estos días, algo así como QT. No me molestaría con WPF: la tecnología web está mucho más viva. – DanDan