Migrer WPF modèles d’application vers WinUI 3

WinUI 3 partage de nombreux concepts XAML avec WPF et est optimisé pour les expériences de Windows modernes. La plupart des modèles WPF ont des équivalents directs dans WinUI 3. Dans certains domaines, WinUI 3 introduit une approche améliorée qui remplace un modèle plus ancien et, dans quelques cas, les fonctionnalités sont toujours en développement actif.

Cette rubrique mappe les modèles de WPF courants à leurs équivalents WinUI 3 afin de planifier votre migration.

Conseil / Astuce

Pour obtenir des conseils généraux WPF + SDK d'application Windows, consultez Utilisez la SDK d'application Windows dans un projet existant.

Avant de choisir un chemin d’implémentation, utilisez Planifier votre modernisation avec un assistant IA pour qu’un assistant de codage IA inspecte votre solution et rédigez un plan basé sur les instructions de migration.

Contrôles

La plupart des contrôles WPF ont des équivalents directs dans WinUI 3. Le tableau suivant couvre les contrôles où le mappage n’est pas un-à-un.

contrôle WPF Équivalent WinUI 3 Remarques
DataGrid Aucun équivalent de premier parti WinUI 3 n’inclut pas de DataGrid intégré. WinUI.TableView géré par la communauté est une option. Évaluez les projets de la communauté en fonction de vos besoins de support et de maintenance.
Ribbon CommandBar / Community Toolkit Labs Envisagez CommandBar et CommandBarFlyout pour les scénarios de style barre d’outils. Un contrôle Ribbon est également disponible dans Community Toolkit Labs (expérimental).
StatusBar InfoBar + disposition personnalisée Utilisez InfoBar pour la messagerie d’état ou ajoutez une zone de pied de page dédiée à votre disposition.
FlowDocumentReader / FlowDocumentScrollViewer RichTextBlock Utilisez RichTextBlock pour l’affichage en lecture seule de texte enrichi. WinUI 3 adopte une approche différente du contenu de document qui est mieux adapté aux scénarios d’application modernes.
PasswordBox avec SecureString PasswordBox PasswordBox de WinUI 3 fournit un masquage de mot de passe. SecureString est déconseillé dans .NET 5+ ; l’approche recommandée consiste à réduire la durée pendant laquelle les informations d’identification sont conservées en mémoire à l’aide de modèles ReadOnlySpan<char>.
WebBrowser WebView2 WebView2 utilise le moteur de Microsoft Edge moderne (Chromium) et est l’approche recommandée pour incorporer du contenu web sur tous les types d’applications de bureau.

Fonctionnalités XAML

WinUI 3 XAML utilise les mêmes concepts de base que WPF : dictionnaires de ressources, styles, liaison de données et extensions de balisage fonctionnent de la même façon. Certains modèles spécifiques à WPF ont évolué pour devenir des alternatives plus améliorées et composables.

fonctionnalité de WPF Approche WinUI 3 Remarques
DataTrigger / MultiTrigger Comportements (Community Toolkit) WinUI 3 utilise des comportements attachés plutôt que des déclencheurs inline. Le package Xaml Behaviors prend en charge DataTriggerBehavior, EventTriggerBehavioret bien plus encore. Les comportements sont plus modulaires et facilement testables unitairement que les déclencheurs WPF.
DynamicResource ThemeResource ThemeResource fournit la recherche de ressources runtime et répond automatiquement aux modifications de thème (clair, foncé, contraste élevé). Utilisez StaticResource pour les valeurs qui ne changent jamais pendant l'exécution.
MultiBinding / PriorityBinding Convertisseurs ou x:Bind Utilisez un convertisseur à valeurs multiples avec des liaisons individuelles, ou utilisez x:Bind avec une propriété calculée sur votre modèle de vue. x:Bind est compilé et type-safe, ce qui le rend plus performant que Binding.
Style avec BasedOn ✅ Supporté Héritage de style avec BasedOn fonctionne dans WinUI 3.
Styles implicites ✅ Supporté Les styles implicites du dictionnaire de ressources (styles sans x:Key) fonctionnent comme prévu.
AdornerLayer Approche de superposition personnalisée WinUI 3 n’a pas d’équivalent de couche d’ornement. Utilisez une Canvas ou Grid superposition dans votre disposition pour obtenir des effets de décoration visuelle similaires , cette approche est plus explicite et plus facile à raisonner.

Fil et répartition

modèle WPF Équivalent WinUI 3 Remarques
Dispatcher.Invoke / BeginInvoke DispatcherQueue.TryEnqueue WinUI 3 utilise DispatcherQueue. Le modèle await DispatcherQueue.EnqueueAsync(...) asynchrone utilise l’extension Community Toolkit.
Application.Current.Dispatcher DispatcherQueue.GetForCurrentThread() Capturez le DispatcherQueue au moment de la construction sur le fil d'exécution d'interface utilisateur et stockez-le pour une utilisation ultérieure sur les fils d'exécution d'arrière-plan.
BackgroundWorker Task / async-await Les modèles asynchrones .NET modernes sont la bonne approche dans WinUI 3. Task, CancellationTokenet couvrent tous les IProgress<T> scénarios et BackgroundWorker s’intègrent naturellement à x:Bind.

Modèle d’application et cycle de vie

concept de WPF Équivalent WinUI 3 Remarques
Application.Startup / Exit Événements App.OnLaunched / Window.Closed WinUI 3 utilise OnLaunched en App.xaml.cs tant que point d’entrée. Le démantèlement par fenêtre est géré dans Window.Closed.
Application.Current.MainWindow Votre Window instance Maintenez une référence à votre instance de fenêtre dans App.xaml.cs et définissez-la comme une propriété.
Window Sous-classement Personnalisation d’AppWindow Les fenêtres WinUI 3 sont personnalisées par le biais de AppWindow (barre de titre, présentateur de fenêtres, modes superposés / plein écran / compact) plutôt que par sous-classification. Consultez Gérer les fenêtres d’application.
SystemParameters DisplayArea / UISettings Les propriétés d’affichage système sont disponibles via DisplayArea et UISettings.

Ressources et localisation

modèle WPF Équivalent WinUI 3 Remarques
.resx fichiers de ressources .resw + ResourceLoader WinUI 3 utilise des .resw fichiers et l’API ResourceLoader . Migrez les chaînes de ressources et mettez à jour le code de recherche de ressource dans le cadre de la migration de l’interface utilisateur.
x:Static extension de balisage x:Bind à une propriété statique Utiliser x:Bind avec une propriété statique ou un accesseur singleton. x:Bind est compilé et génère des messages d’erreur plus clairs que x:Static.
Dictionnaires de ressources fusionnés ✅ Supporté ResourceDictionary.MergedDictionaries fonctionne dans WinUI 3.
Dictionnaires de ressources spécifiques au thème ✅ Supporté ResourceDictionary.ThemeDictionaries est le mécanisme WinUI 3 pour les ressources par thème et s’intègre au basculement automatique en mode sombre/clair.

Impression

fonctionnalité de WPF État WinUI 3 Remarques
PrintDialog / PrintDocument PrintManager La prise en charge complète de l’impression est disponible via PrintManager. Consultez Imprimer à partir de votre application.

Outils de développement

outils de WPF État WinUI 3 Remarques
Concepteur XAML (onglet Création) Pas encore pris en charge Le concepteur XAML Visual Studio ne prend actuellement pas en charge les projets WinUI 3. XAML Rechargement à chaud est pris en charge et est la méthode recommandée pour itérer sur les dispositions et les styles sans arrêter le débogueur.
Blend pour Visual Studio ⚠️ Prise en charge limitée Blend est fourni avec Visual Studio et peut ouvrir des projets WinUI 3. Le plan du document XAML est fonctionnel, mais la vue Création n’est pas disponible pour WinUI 3.

Migration assistée par l’IA

Pour un guide pas à pas assisté par GitHub Copilot sur la migration de WPF vers WinUI 3, consultez Migrer des applications WPF vers WinUI 3 avec l’IA.

Voir également