Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
WPF appar körs på .NET men använder Windows Presentation Foundation XAML-stacken. WinUI 3 är den moderna ersättningen. Den viktigaste utmaningen för AI-migrering är att WPF använder System.Windows.* namnområden medan WinUI 3 använder Microsoft.UI.Xaml.*, och många kontroller och fönster-API:er behöver riktade ersättningar i stället för enkel sökning och ersättning.
Installera migreringsfärdigheten för WPF
gh copilot plugin install winui@awesome-copilot
API-ersättningstabell
Namnområden
| 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.* |
Kontroller
| WPF | WinUI 3 | Notes |
|---|---|---|
Window |
Microsoft.UI.Xaml.Window |
Olika API-yta |
Grid, StackPanel, Canvas |
Oförändrad | Samma namn |
TextBox, Button, CheckBox |
Oförändrad | Samma namn, WinUI-formatering |
ListBox / ListView |
ListView |
Använd ItemsView för ny kod |
DataGrid |
DataGrid (CommunityToolkit) |
Lägg till CommunityToolkit.WinUI.Controls.DataGrid |
TabControl |
TabView |
Olika API |
Menu / MenuItem |
MenuBar / MenuBarItem |
|
ToolBar |
CommandBar |
|
RichTextBox |
RichEditBox |
|
WebBrowser |
WebView2 |
Olika API: asynkronisering |
Trådning
| WPF | WinUI 3 |
|---|---|
Dispatcher.Invoke(...) |
DispatcherQueue.TryEnqueue(...) |
Dispatcher.BeginInvoke(...) |
DispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, ...) |
Application.Current.Dispatcher |
this.DispatcherQueue |
Fönsterhantering och DPI
| WPF | WinUI 3 |
|---|---|
Window.WindowState |
AppWindow.Presenter (använd OverlappedPresenter) |
SystemParameters.WorkArea |
DisplayArea.GetFromWindowId(...) |
PresentationSource.FromVisual() |
WinRT.Interop.WindowNative.GetWindowHandle(window) |
Datalänkning
| WPF | WinUI 3 |
|---|---|
INotifyPropertyChanged |
Oförändrad |
ObservableCollection<T> |
Oförändrad |
{Binding} |
{x:Bind} föredragen (kompileringstid) |
DependencyProperty |
Oförändrad |
IValueConverter |
Oförändrad |
Resurser och formatmallar
| WPF | WinUI 3 |
|---|---|
ResourceDictionary |
Oförändrad |
StaticResource |
Oförändrad |
DynamicResource |
{ThemeResource} för systemfärger |
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.
Ändringar i projektfilen
<!-- 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:er som inte migreras direkt
Be agenten att flagga dessa i stället för att gissa:
- WPF
Adornerlager – ingen motsvarighet i WinUI 3 - WPF
FlowDocument/DocumentViewer– användRichEditBoxför redigerbart innehåll, utan motsvarande visningsprogram - WPF
Viewport3D– använd Win2D eller DirectX interop - Airspace/HWND-hosting – använd
SwapChainPaneleller Win32-interopmönster
Relaterat innehåll
Windows developer