¿Qué es mejor para el desarrollo de Windows en C#, WPF o UWP?

Cuando se lanzó .NET en el año 2000, se podía utilizar WinForms para hacer aplicaciones de escritorio para Windows. Proporciona acceso a los controles 'nativos' (es decir, un botón hecho en WinForms realmente es un control de botón de Windows desde user32.dll) envolviendo la API de Windows en código gestionado. Estos pueden ejecutarse en cualquier versión de Windows que tenga instalada la versión apropiada de .NET framework, incluyendo hasta Windows 10.

En 2006, se lanzó WPF que es una alternativa a WinForms. WPF utiliza XAML, que es un lenguaje basado en XML, para declarar los elementos de la interfaz de usuario. En una aplicación sencilla de WPF, el archivo .xaml describe la interfaz gráfica de usuario y el archivo code-behind describe la lógica. DirectX se utiliza para dibujar lo que se describe en el .xaml en la ventana.

Al igual que Winforms, los programas realizados con WPF pueden ejecutarse en cualquier versión de Windows que tenga instalada la versión adecuada del marco de trabajo .NET, incluso hasta Windows 10. Tenga en cuenta que el uso de XAML es completamente opcional. Cualquier elemento de la interfaz de usuario que se describa utilizando XAML también se puede hacer utilizando su lenguaje .NET C# o VisualBasic.NET. Pero usar XAML suele ser más sencillo. Ver To XAML or not to XAML (MSDN Blogs).

Desde 2012 junto con Windows 8, se puede hacer un nuevo tipo de app llamado metro/modern/windows-8/windows-store-apps. Estas apps son similares a WPF en el sentido de que utilizan XAML para describir la GUI. Estas aplicaciones sólo pueden ejecutarse en Windows 8, 8.1 y Windows 10. Windows 8.1 añadió algunas mejoras y características, pero se mantuvo en su mayoría igual. La misma tecnología se utilizó para hacer aplicaciones para Windows Phone.

Con el lanzamiento de Windows 10, Microsoft hizo la UWP (Plataforma Universal de Windows) a través de la cual se puede utilizar la misma base de código para dirigirse a diferentes tipos de dispositivos (escritorio/móvil/xbox/IoT/holográfico). Estas aplicaciones hechas para la UWP son similares a las anteriores aplicaciones de Windows 8/8.1. Como antes, se usa XAML para describir la GUI.

Sólo para las apps de la Windows Store, no hay retrocompatibilidad. La línea de tiempo va Windows 8 -> Windows 8.1 -> Windows 10/UWP. Una app hecha en UWP sólo puede funcionar en Windows 10 y una app hecha en Windows 8.1 no puede funcionar en Windows 8.