GUI de Windows: WPF o WinRT (2015+)


Estoy tratando de obtener una visión general de las diferentes tecnologías, para usar cuando se construyen GUI en el mundo de Windows.

Para el contexto, estoy construyendo un pequeño juego multijugador de plataformas 2d. (Solo para aprender..)

Mi profesor dice que piensa que WPF es el camino correcto a seguir, pero parece que solo lo compara con Windows Forms.

Mi comprensión es, que aquí en 2015, Windows Forms está totalmente muerto?

En estas otras preguntas apiladas, dicen WinRT + XAML es para Metro GUI building (Ventana 8 azulejos cosa!), y parece que WPF es algo que solo se usa para escritorio en Window 7/8 y que está muy relacionado con Silverlight..

¿Cómo se compara el tiempo de ejecución de Windows 8 (WinRT / Windows Store apps / Windows 10 Universal App) con Silverlight y WPF?

  • El escritorio es donde viven las aplicaciones antiguas (rojo. PMA).
  • La nueva clase de aplicaciones, aplicaciones Metro, se puede construir de varias maneras, incluido por VB.NET, C# o C++. Estas tres opciones de idioma pueden utilizar XAML para crear la interfaz de usuario. La alternativa es utilizar JavaScript / HTML5 / CSS para el desarrollo tanto de la interfaz de usuario y código de aplicación.

Mi verdadera pregunta es: ¿No hay una buena manera de construir GUI en el Mundo de las Ventanas?

Y si no, qué tecnologías se deben utilizar en la ventana 7, Ventana 8 (Escritorio y Metro), Teléfono de la ventana, (Y Windows 10!), e incluso x-box..

Es a diferente tecnologías a comparar de esta manera?

¿Qué crees que es lo correcto para invertir tiempo?

Author: Community, 2015-02-18

9 answers

Hay mucho aquí, pero aquí va:

  • ¿Windows Forms (Winforms) está muerto ? No. Sigue siendo apoyado activamente. Dicho esto, es una horrible tecnología para trabajar (al menos una vez que conoces la magia de WPF)
  • Si quieres construir una app de escritorio bien diseñada (clásica, no Metro), WPF es la respuesta en términos.NET puros. puede usar las API de WinRT (como sus clases de sockets), pero no puede ejecutarlas en OSs antes de Windows 8. La interfaz de usuario sigue siendo WPF.
  • Las aplicaciones WinRT son para la tienda Windows 8 (también están disponibles en la tienda Windows 10). No se puede usar WPF aquí, o WinRT en el escritorio, por lo que el lugar donde se implementa determina lo que se usa. Usted tiene razón en su comprensión de los idiomas/tecnologías disponibles.
  • Windows Phone 8 utiliza un tiempo de ejecución modificado de WinRT (esto ha cambiado en Windows 10). Para Win8 / WP8, puede usar aplicaciones" Universales " para compartir la mayor parte del código entre una aplicación WinRT estándar y una aplicación de Windows phone.
  • Windows 10 utiliza la Plataforma Universal de Windows (UWP) que se basa en.NET Core. El código desarrollado para Windows 10 también se puede usar en Xbox One, Windows Phone 10 y HoloLens. WPF sigue siendo para aplicaciones de escritorio "estándar".
  • XBox es complicado. XNA se va, y Microsoft parece estar alejándose del contenido creado por la comunidad para la plataforma. Dicho esto, Unity puede implementarse en XBox, y creo que el desarrollo estándar de DirectX (C++) funciona para ello. Ventanas Universales Las aplicaciones de la plataforma también se pueden implementar una Xbox One, y esta parece ser la estrategia de Microsoft en el futuro.

En cuanto a en qué gastar tiempo, eso depende de lo que estés apuntando :). Aprender WPF / UWP + XAML le dará muchos beneficios si desea mantenerse "actualizado" en el desarrollo de la interfaz gráfica de usuario.NET, así que eso es lo que yo buscaría. WPF tiene la mayoría de las características, por lo que al comenzar allí solo tiene que encontrar soluciones para lo que falta en UWP (o cualquier otro basado en XAML tecnología).

Si lo hace, asegúrese de aprender el patrón MVVM (Model-View-View Model). Funciona realmente bien con las tecnologías basadas en XAML, y le permite compartir mucha lógica entre sus aplicaciones WPF y UWP. La misma lógica también se puede utilizar si eventualmente desarrolla aplicaciones Xamarin para iOS / Android, etc.

Tenga en cuenta que para verdaderodesarrollo de juegos, usted querrá un real marco de juego (como Unity3D o incluso XNA). Puedes hacerlo en WPF, y esa es una mejor opción que Winforms, pero ninguno de los dos son realmente para juegos.

 130
Author: BradleyDotNET,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-26 15:41:58

Es un hilo bastante viejo, pero como me encontré con esto a través de Google (por interés), tal vez alguien más podría llegar aquí también. Esta es una pregunta que se hace una y otra vez por los nuevos programadores. Así que me gustaría responder a algunas cosas, así, ahora que Windows 10 es lanzado oficialmente.

En primer lugar, uno no debe comenzar con Formularios de Windows más. Es la tecnología más madura por ahora, pero no habrá ningún desarrollo adicional de Windows Forms, solo está en etapa de mantenimiento ahora. WPF se desarrolla activamente (la última vez que leí). Pero ahora, las aplicaciones Universales de Windows (WinRT one) ya no necesitan usarse en pantalla completa, y se pueden usar en modo de ventana al igual que otras aplicaciones de escritorio (WPF y WinForms). Esto aumenta su facilidad de uso mucho en las computadoras que no son tabletas. Creo que este será el futuro para las aplicaciones de escritorio también. Aunque, los softwares WPF son las aplicaciones de escritorio tradicionales (sin permisos, solo UAC). De cualquier manera, no importa que aprendas WPF o WinRT (usando. Net) desarrollo, terminarás aprendiendo ambas cosas. Ambos son XAML + C # (o algún otro lenguaje.Net). Estaba aprendiendo WPF cuando WinRT salió con Windows 8. Me sentí como en casa, solo unos pocos cambios menores a los que te acostumbras muy pronto. Sin embargo, no estoy seguro sobre el escenario MVVM (enlace de datos) en WinRT. Todavía estoy aprendiendo ese aspecto de WPF.

La ventana 10 acaba de iniciarse. Windows 8/8. 1 no vio tanto éxito como Windows 7. Así que si quieres construir una aplicación que tenga una audiencia más amplia, debes ir con WPF por ahora. Pero en un futuro cercano, WinRT será el camino a seguir.

Para su pregunta, " ¿qué tecnologías se deben utilizar en Ventana 7 , Ventana 8(Escritorio y Metro), Teléfono de la ventana, (Y Windows 10!), e incluso x-box.", la única respuesta es Windows Universal Apps. Esta es la razón exacta por la que se desarrolló este marco. Una tecnología que se utilizará para desarrollar aplicaciones para todos los dispositivos. Escritorio, Tableta, teléfonos (incluido Android con Xamarin incluido con Visual Studio 2015), Xbox e IoT (Internet de las Cosas).

 25
Author: Prateek Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-12 10:28:53

Trataré de responder solo una de sus preguntas:

¿Windows Forms está totalmente muerto?

No, la tecnología de Windows forms no está muerta. Te diré por qué. WPF y XAML es una tecnología muy completa y compleja y puede construir una interfaz de usuario muy agradable. Pero! Esta tecnología requiere un conocimiento profundo. Para diseños básicos, no necesitas tanto conocimiento, pero para algunos diseños avanzados debes tener un conocimiento profundo y cuando empecé con esta tecnología y pasé mucho tiempo buscando algunos consejos en Google. Entonces, cuando necesito algunos formularios simples para la entrada del usuario, siempre estoy eligiendo la tecnología de Windows Forms, que es muy simple y directa. Esta es también la razón por la que esta tecnología fue muy exitosa cuando llegó al mundo. Cuando comienzas con WPF también necesitas saber qué es el patrón de diseño MVVM y algunos programadores no experimentados se confunden con eso.

 22
Author: Tomáš Opis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-05 14:50:58

Ahora es abril de 2016 y todavía no hay una respuesta clara a esto. Estamos desarrollando una aplicación de escritorio de monitoreo de rendimiento en tiempo real muy moderna que tiene que renderizar múltiples gráficos y pantallas, mezclados con texto y varios otros gráficos. Nuestra aplicación es C#, WPF con. NET Framework 4.5.2 pero todavía estamos escribiendo algunos componentes usando WinForms y GDI + para obtener un rendimiento que sea aceptable. Simplemente no lo hemos logrado con WPF. Incluso hemos desarrollado un par de pantallas en el aplicación con DirectX pero eso añade mucha complejidad que solo unos pocos del equipo pueden soportar. La simplicidad y velocidad pura que podemos obtener al alojar una pantalla WinForms dentro de WPF y la velocidad de GDI+ nos da lo que necesitamos en el costoso de la estructura pure View/ViewModel junto con tener que lidiar con varios problemas de espacio aéreo. Nuestra aplicación es bastante especialista y me encantaría deshacerme de WinForms por completo, pero desafortunadamente esto no es posible en nuestro caso. Para un rendimiento puro usted tendrá que ir ya sea DirectX o WinForms.

 16
Author: Gareth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-15 08:04:20

Mis dos centavos... si desea verdaderas aplicaciones universales, es decir, programas que pueden ejecutarse en CUALQUIER sistema operativo de escritorio, incluido Windows, WinForms sigue siendo el camino a seguir. Solo asegúrese de mantener CLR compatibile, y se puede implementar en Mac y Linux a través de Mono. Un gran beneficio. XAML puede ser genial, pero no se va a portar a otros sistemas operativos.

Personalmente encuentro el sandboxed (quicksanded?) modelo de negocio de UWP aterrador; contrarresta la apertura que Windows ha representado desde el principio.

 5
Author: Jeroen S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-31 21:11:44

Este es un hilo antiguo pero importante con el progreso actual de.NET framework, las características de c# y el mayor enfoque en c# como opción de desarrollo de juegos.

WPF casi nunca se elige como una plataforma de juego c# con toda honestidad. Los problemas del espacio aéreo de la WPF asustaron a la gente bastante rápido. No creo que muchos (si es que hay alguno) títulos importantes o motores de juego de corriente principal soporten WPF como una plataforma de destino, ya sea debido a esto. ¡WPF es una gran plataforma para lanzadores de juegos!

WinForms, mientras que ahora en modo de mantenimiento, seguirá siendo una opción válida para los próximos años. Está probado con el tiempo y es estable. Por lo que he visto, incluso en 2017, WinForms sigue siendo la plataforma más común elegida para el desarrollo de juegos basados en c#.

Mirando los datos de la encuesta de hardware de Steam puedes ver que en el momento de escribir esta respuesta (julio de 2017), Windows 10 de 64 bits es ahora la plataforma de juegos de PC dominante con una cuota de mercado del 50%, seguido de Windows 7 de 64 bits con un 32% y Windows 8.1 de 64 bits 7%. Todas las demás plataformas del sistema operativo cuota de mercado es tan pequeña que apenas vale la pena considerar otra cosa que estos tres.

Siendo ese el estado actual de los juegos de PC, WinForms es el denominador más común para apuntar a las 3 principales plataformas de PC. Mirando hacia el futuro, UWP será la mejor plataforma objetivo para el desarrollo de juegos c#, ya que Windows 7 y 8 pierden una cuota de mercado significativa frente a Windows 10, a menos que aparezca una nueva plataforma que lo reemplace. Así que eso es sólo por los números.

Si la elección basada en el mejor nivel de compatibilidad por plataforma de sistema operativo en lugar de soportar la máxima cuota de mercado, las opciones serían más como:

  • Windows 10: UWP
  • Windows 8.1: WinRT o Windows Store
  • Windows 7: WinForms

La mayoría de las otras respuestas se centran en el desarrollo de aplicaciones estándar de Windows, pero el desarrollo de juegos es un ámbito muy diferente y diferentes factores influirán en sus elecciones, como el sistema operativo de destino y lo que su elección de la API de gráficos o el motor de juego en realidad son los mejores.

 4
Author: Mike Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-18 09:54:10

WinRT ha estado en el escritorio durante mucho tiempo, estoy escribiendo WinRT, que se ejecuta en mi escritorio. Y bajo Windows 10, esas aplicaciones admitirán ubicaciones no acopladas (ventanas como tradicionalmente las conoce).

No recomendaría WinForms o WPF a nadie que comience hoy. Deben aprender WinRT / XAML principalmente. Y aprender un poco de Win32/. net como lo necesitan, dependiendo de su idioma de elección..

" dicen que WinRT + XAML es para Metro GUI building (Ventana 8 ¡azulejos!) "This Esto es una abstracción tan excesiva, que es inútil. WinRT es un tiempo de ejecución, como Win32, no es solo para GUI, así que lo que "dicen" es una completa BS. XAML es una capa de interfaz de usuario (al igual que XAML en WPF), pero decir que es Metro GUI también está mal, ya no hay tal cosa como Metro GUI. XAML es la capa de interfaz de usuario de Windows. Y " Windows 8 azulejos cosa!"es expresivo de la visión de túnel de ciertos pueblos. Sería como si yo dijera que Win32 es una cosa del menú de inicio. Puedes ver lo ridícula que es esa declaración. ser.

 3
Author: Gavin Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-14 01:57:10

He estado trabajando con tecnologías de Microsoft durante más de 10 años. Lo más importante que había aprendido no es simplemente escuchar lo que Microsoft le está ofreciendo. Cuando Microsoft dice que este es el futuro, tiene un 50% de probabilidades de equivocarse. Microsoft seguro que hará lo mejor que pueda para promover los productos en los que han invertido, pero eso no significa que usted debe seguir. Vea lo que sucede con WCF y Silverlight.

Aunque WPF es una plataforma muy agradable para aprender, es tiene una enorme curva de aprendizaje. No creo que ningún desarrollador con menos de 5 años de experiencia en programación pueda hacer bien WPF.

Siguiendo el patrón MVVM, encontrará que hacer algo relativamente fácil en WinForm puede convertirse en un gran desafío en WPF. Como colorear una celda en función de alguna condición después de una actualización, o desplazar una fila en la vista y encenderla.

Por supuesto, puedes decir que no tienes que hacer MVVM. Solo pon tu código en código detrás y haz que funcione. Sí que funcionará, pero ¿cuál es el punto de usar WPF? ¿Por qué no usar el formulario Win?

 2
Author: Jason Ching,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-23 05:32:29

Me encontré con esta pregunta hace un año. Llegué a la conclusión de que ya sea XAML, WPF o WinRT son el entorno de desarrollo correcto para empezar.

Recomiendo encarecidamente usar.Net Framework para la capa de datos (incluidos los Servicios Web y la capa RESTful (JSON) ) y HTML5/CSS3 puro y Javascript para la capa de presentación web.

Dentro de Windows 10 puede integrar cualquier aplicación web como una aplicación de metro solo fuera de la caja.

WinRT, XAML, WPF y similares ms stuff solo se ejecuta en Windows y tiene muchas limitaciones.

Así que después de un año todavía estoy muy feliz por mi decisión de no usar WinRT o XAML para mi nuevo proyecto.

 1
Author: Khamis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-10 17:08:50