Solltest du mit denn Programmieren Anfangen, und dich für Windows als Basis Plattform entschieden haben, kann ich dir nur empfehlen dich mit den Konzepten von WPF und UWP dich auseinanderzusetzen bei der Programmiersprache in DotNet solltest du auf C# setzen, schließlich wurde WPF mit C# eingeführt und bietet gegen über WinForms einige Verbesserungen mit sich, vergiss nicht das Microsoft WinForms nicht mehr Weiterentwickelt, ist nur für die alten Hasen.
Je nach deiner Anwendung musst du beträchtlichem Portierungsaufwand
rechnen, da bei WPF gänzlich ein anderes Konzept zum Einsatz kommt.
Eine Teilmigration deiner Anwendung von WinForms zur WPF wird von Microsoft unterstützt, durch das WindowsFormsHost -Control. So kannst du Teile von WinForms in WPF nutzen, das Gegenstück ist das ElementHost-Control damit kannst du Teile von WPF in WinForms nutzen.
Einige kurze Liste der Highlights:
1.) Codebehind-Modell, ähnlich wie bei ASP.NET-Anwendungen,
2.) Strikte Trennung von Design und Logik,
3.) Desktop- (Fenster-basiert) oder Browser-Anwendung (Seiten-basiert) möglich,
4.) vektorbasierte Grafikausgabe (Fließkomma-Arithmetik), damit frei skalierbare Oberflächen
unabhängig vom Ausgabegerät,
5.) schnelle Grafikausgabe dank Hardwarebeschleunigung und Ausgabe per DirectX,
6.) umfangreiche Unterstützung für 2D- und 3D-Grafik,
7.) hervorragende Layout-Optionen für Texte und Steuerelemente,
8.) umfangreiche Unterstützung für Grafik-Effekte (Schatten, Transparenz, Rotation, Scherung
etc.) bei der Oberflächengestaltung,
9.) komplexe grafische Animationen für Elemente,
10.) Unterstützung von Medien (Videos, Bilder, Audio),
11.) einfache Datenbindung für fast alle Eigenschaften möglich
12.) ClickOnce oder XCopy-Deployment,
13.) teilweise Abwärtskompatibilität durch Windows Forms-Integration.
Vergiss nicht ein Verweis im Namensraum (Using) und denn im Assembly wenn du eine Teilmigration vornehmen willst, das Bild Sagt nichts aus, das ist der Standard Code der in der Code Behind angelegt wird, wenn man in der XAML Datei ein Click Event eines Button hinzufügt ohne X:Name.