Dot.Blog

Consulting DotNet C#, XAML, WinUI, WPF, MAUI, IA

WPF sous .NET 9 : rétro-modernisation et nouveaux usages

Lancé en 2006 avec .NET Framework 3.0, WPF (Windows Presentation Foundation) semblait condamné à long terme... Pourtant , sous .NET Core puis .NET 5+ et jusqu'à .NET 9, WPF continue de vivre, de gagner en performances et en compatibilité, et reste largement utilisé dans les environnements professionnels.

Cet article explore comment moderniser une base WPF en tirant parti de .NET 9, des nouveaux outils, et des techniques de rétrofit pour le rendre plus performant, maintenable et moderne.

🚀 Pourquoi WPF n’est pas mort (et ne le sera pas demain)

  • Des milliers d'applications professionnelles reposent encore sur WPF.
  • Le runtime WPF est open source depuis 2018.
  • Le support de .NET 9 permet :
    • des améliorations de performance (GC, JIT, PGO) ;
    • l’intégration native avec Roslyn, Source Generators, Span, etc. ;
    • le packaging autonome (single file, trimming).

🎯 Ce qu’on peut moderniser concrètement en 2025

  1. Architecture MVVM avec CommunityToolkit.MVVM

Au lieu d’un MVVM artisanal, vous pouvez maintenant utiliser une approche moderne avec des attributs :

public partial class MainViewModel : ObservableObject
{
    [ObservableProperty]
    private string nom;

    [RelayCommand]
    private void AfficherMessage() => MessageBox.Show($"Bonjour {Nom} !");
}

C'est aujourd'hui un code classique puisque la même librairie est compatible avec WinUI3.x et MAUI notamment. Donc on se sent à la maison ! D'ailleurs je crois avoir pris le même exemple que pour l'article sur WinUI3.x, et cela serait le même pour du .NET console ou du MAUI. Il y a une convergence des outils de développement Microsoft qui simplifie beaucoup la vie des développeurs. Une connaissance s'appliquant aujourd'hui à l'ensemble des plateformes, MVVM, injection de dépendances, création d'exécutables stand-alone avec .NET intégré, etc.

  1. Source Generators : ViewModel auto-générés

Intégration propre de code compile-time sans nuire à la lisibilité. Les ObservableProperty et RelayCommand deviennent automatiques, réduisant la verbosité.

🖼️ UI rétro-compatible mais enrichie

WPF permet encore :

  • Des interfaces riches, vectorielles, avec animations.
  • L’utilisation d’Effects, VisualBrush, ControlTemplates, toujours très puissants.
  • L'intégration de WebView2 (Microsoft Edge) pour moderniser l’affichage de contenu web.

Exemple d’intégration WebView2 dans WPF (via NuGet Microsoft.Web.WebView2) :

<Grid>
    <wv2:WebView2 Source="https://openai.com" />
</Grid>

🔧 Modernisation des performances

  • Utilisation de Span<T>, ValueTask, async/await pour les IO.
  • Binding asynchrones : TaskCompletionSource, AsyncCommand.
  • Désactivation du EnableMultiCoreJIT obsolète, au profit des optimisations runtime .NET 9.
  • Remplacement du DispatcherTimer par PeriodicTimer pour les tâches répétées plus efficaces.

🧩 Interopérabilité et modularité .NET 9

  • Intégration de composants .NET Standard, .NET 6/7/8/9.
  • Chargement dynamique de plugins en .dll avec AssemblyLoadContext.
  • Utilisation de System.Text.Json et HttpClient modernes pour REST/API.

📦 Déploiement : autonome, sans installateur

Grâce à PublishSingleFile et self-contained, on peut publier une app WPF moderne sans installer .NET :

dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:Trim=true

📚 Cas d’usage fréquents en 2025

  • Interfaces de gestion métier lourdes avec tableaux, grilles, impressions, etc.
  • Outils internes d’entreprise (legacy évolutif).
  • Tableaux de bord embarqués en usine ou en kiosque.
  • Bornes interactives
  • Applications LOB exigeantes en mise en page
  • Partout où la fiabilité d'un environnement robuste éprouvé par le temps est indispensable...

🧭 Quand éviter WPF ?

Scénario

Solution alternative

Besoin multi-plateforme natif

MAUI

UI moderne avec contenu web riche

WinUI 3 + WebView2

Appli grand public moderne Windows

WinUI 3 ou MAUI Windows

Application cloud-native

Blazor ou ASP.NET Core

Conclusion

WPF sous .NET 9 n’est ni obsolète ni limité : il reste un outil fiable, productif, rétro-compatible, et qui peut parfaitement s’inscrire dans une stratégie de modernisation partielle.Le fait que le vieux socle "framework dotnet" ait été remplacé par dotnet Core a totalement remis WPF dans la course. C'est en plus la preuve que le produit est suivi et maintenu.

Stay Tuned !

Faites des heureux, PARTAGEZ l'article !