Een WPF-app migreren naar WinUI 3

WPF apps worden uitgevoerd op .NET, maar de Windows Presentation Foundation XAML-stack gebruiken. WinUI 3 is de moderne vervanging. De belangrijkste uitdaging voor AI-migratie is dat WPF gebruikmaakt van System.Windows.* naamruimten terwijl WinUI 3 gebruikmaakt van Microsoft.UI.Xaml.*, en veel besturingselementen en venster-API's gerichte vervangingen nodig hebben in plaats van eenvoudige zoek- en vervanging.

De WPF-migratievaardigheid installeren

gh copilot plugin install winui@awesome-copilot

API-substitutietabel

Namespaces

WPF WinUI 3
System.Windows.* Microsoft.UI.Xaml.*
System.Windows.Controls.* Microsoft.UI.Xaml.Controls.*
System.Windows.Media.* Microsoft.UI.Xaml.Media.*
System.Windows.Data.* Microsoft.UI.Xaml.Data.*
System.Windows.Input.* Microsoft.UI.Input.*

Controles

WPF WinUI 3 Aantekeningen
Window Microsoft.UI.Xaml.Window Verschillende API-surface
Grid, StackPanel, Canvas Ongewijzigd Dezelfde namen
TextBox, Button, CheckBox Ongewijzigd Dezelfde namen, WinUI-stijl
ListBox / ListView ListView Gebruiken ItemsView voor nieuwe code
DataGrid DataGrid (CommunityToolkit) CommunityToolkit.WinUI.Controls.DataGrid toevoegen
TabControl TabView Verschillende API
Menu / MenuItem MenuBar / MenuBarItem
ToolBar CommandBar
RichTextBox RichEditBox
WebBrowser WebView2 Verschillende API, asynchroon

Draadbewerking

WPF WinUI 3
Dispatcher.Invoke(...) DispatcherQueue.TryEnqueue(...)
Dispatcher.BeginInvoke(...) DispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, ...)
Application.Current.Dispatcher this.DispatcherQueue

Vensterbeheer en DPI

WPF WinUI 3
Window.WindowState AppWindow.Presenter (gebruik OverlappedPresenter)
SystemParameters.WorkArea DisplayArea.GetFromWindowId(...)
PresentationSource.FromVisual() WinRT.Interop.WindowNative.GetWindowHandle(window)

Gegevensbinding

WPF WinUI 3
INotifyPropertyChanged Ongewijzigd
ObservableCollection<T> Ongewijzigd
{Binding} {x:Bind} voorkeur (compileertijd)
DependencyProperty Ongewijzigd
IValueConverter Ongewijzigd

Bronnen en stijlen

WPF WinUI 3
ResourceDictionary Ongewijzigd
StaticResource Ongewijzigd
DynamicResource {ThemeResource} voor systeemkleuren
SystemColors.WindowBrush {ThemeResource SystemFillColorSolidNeutralBrush}

Startprompt

I'm migrating a WPF app to WinUI 3 using the Windows App SDK.

Apply these substitutions:
- System.Windows.* → Microsoft.UI.Xaml.*
- Dispatcher.Invoke / BeginInvoke → DispatcherQueue.TryEnqueue
- Window.WindowState → AppWindow with OverlappedPresenter
- PresentationSource → WinRT.Interop.WindowNative.GetWindowHandle
- DynamicResource for system colors → ThemeResource
- {Binding} → {x:Bind} where possible (compile-time binding)
- ListBox → ListView or ItemsView
- TabControl → TabView
- WebBrowser → WebView2
- DataGrid → CommunityToolkit.WinUI.Controls.DataGrid

Do not use any System.Windows.* namespaces in new code.
Do not use Dispatcher.Invoke — use DispatcherQueue.TryEnqueue.
Flag APIs without a direct WinUI 3 equivalent rather than guessing.

Wijzigingen in projectbestanden

<!-- Before (WPF) -->
<TargetFramework>net10.0-windows</TargetFramework>
<UseWPF>true</UseWPF>

<!-- After (WinUI 3) -->
<TargetFramework>net10.0-windows10.0.19041.0</TargetFramework>
<WindowsSdkPackageVersion>10.0.19041.31</WindowsSdkPackageVersion>
dotnet add package Microsoft.WindowsAppSDK

API's die niet rechtstreeks worden gemigreerd

Laat de agent deze markeren in plaats van te raden:

  • WPF Adorner laag - geen equivalent in WinUI 3
  • WPF FlowDocument / DocumentViewer — gebruik RichEditBox voor bewerkbare inhoud; geen viewer-equivalent
  • WPF Viewport3D : gebruik Win2D- of DirectX-interop
  • Air-space / HWND hosting — gebruik SwapChainPanel of Win32 interop patronen