Qual è il migliore per lo sviluppo di Windows in C#, WPF o UWP?

Quando .NET è stato rilasciato nel 2000, si poteva usare WinForms per fare applicazioni desktop per Windows. Fornisce l'accesso ai controlli 'nativi' (cioè un pulsante fatto in WinForms in realtà è un controllo pulsante di Windows da user32.dll) avvolgendo l'API di Windows nel codice gestito. Questi possono essere eseguiti in qualsiasi versione di Windows che ha la versione appropriata di .NET framework installata, incluso fino a Windows 10.

Nel 2006, è stato rilasciato WPF che è un'alternativa a WinForms. WPF usa XAML, che è un linguaggio basato su XML, per dichiarare gli elementi dell'interfaccia utente. In una semplice applicazione WPF, il file .xaml descrive la GUI e il file code-behind descrive la logica. DirectX è usato per disegnare ciò che è descritto nel file .xaml nella finestra.

Come Winforms, i programmi fatti usando WPF possono essere eseguiti in qualsiasi versione di Windows che abbia la versione appropriata del framework .NET installata, incluso fino a Windows 10. Notate che l'uso di XAML è completamente opzionale. Qualsiasi elemento dell'interfaccia utente che descrivi usando XAML può anche essere fatto usando il tuo linguaggio .NET C# o VisualBasic.NET. Ma usare XAML è solitamente più semplice. Vedere To XAML or not to XAML (MSDN Blogs).

Dal 2012 insieme a Windows 8, un nuovo tipo di app chiamato metro/modern/windows-8/windows-store-apps può essere fatto. Queste app sono simili a WPF in quanto usano XAML per descrivere la GUI. Queste app possono funzionare solo in Windows 8, 8.1 e Windows 10. Windows 8.1 ha aggiunto alcuni miglioramenti e caratteristiche, ma è rimasto per lo più lo stesso. La stessa tecnologia è stata utilizzata per creare app per Windows Phone.

Con il rilascio di Windows 10, Microsoft ha creato la UWP (Universal Windows Platform) attraverso la quale è possibile utilizzare la stessa base di codice per puntare a diversi tipi di dispositivi (desktop/mobile/xbox/IoT/holographic). Queste app fatte per la UWP sono simili alle precedenti app di Windows 8/8.1. Come prima, XAML è usato per descrivere la GUI.

Solo per le app del Windows Store, non c'è retrocompatibilità. La linea temporale va Windows 8 -> Windows 8.1 -> Windows 10/UWP. Un'app fatta in UWP può funzionare solo in Windows 10 e un'app fatta in Windows 8.1 non può funzionare in Windows 8.