Migrera en UWP-app till WinUI 3

UWP är inte längre under aktiv utveckling. WinUI 3 och Windows App SDK är dess efterföljare – och AI-verktyg kan automatisera större delen av migreringen. Den största utmaningen är att AI-modeller har tränats på år av UWP-exempel, så utan vägledning återskapar de mönster som du försöker flytta bort från. Den här sidan ger din agent den kontext den behöver för att få det rätt.

Installera plugin-programmet för WinUI-agenten

Färdigheten winui-uwp-migration hanterar de vanliga ersättningarna automatiskt:

gh copilot plugin install winui@awesome-copilot

Se Plugin-programmet för WinUI-agenten för fullständig information.

API-ersättningstabell

Namnområden

UWP WinUI 3
Windows.UI.Xaml.* Microsoft.UI.Xaml.*
Windows.UI.Xaml.Controls.* Microsoft.UI.Xaml.Controls.*
Windows.UI.Xaml.Media.* Microsoft.UI.Xaml.Media.*
Windows.UI.Composition Microsoft.UI.Composition

Trådning

UWP WinUI 3
CoreDispatcher DispatcherQueue
Dispatcher.RunAsync(...) DispatcherQueue.TryEnqueue(...)
CoreApplication.MainView.CoreWindow.Dispatcher this.DispatcherQueue (från en Window eller Page)

Windowing

UWP WinUI 3
ApplicationView AppWindow
ApplicationView.GetForCurrentView() AppWindow.GetFromWindowId(...)
ApplicationViewTitleBar AppWindowTitleBar
CoreWindow Microsoft.UI.Xaml.Window
SystemNavigationManager Bakåtknapp via AppWindowTitleBar

Dialogrutor och väljare

UWP WinUI 3
MessageDialog ContentDialog (ställ in XamlRoot)
FileOpenPicker FileOpenPicker + InitializeWithWindow
FileSavePicker FileSavePicker + InitializeWithWindow
FolderPicker FolderPicker + InitializeWithWindow

Important

Väljare kräver InitializeWithWindow innan de anropar PickSingleFileAsync (eller liknande):

var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(App.MainWindow);
WinRT.Interop.InitializeWithWindow.Initialize(picker, hwnd);

ContentDialog kräver XamlRoot (inte InitializeWithWindow):

var dialog = new ContentDialog { XamlRoot = this.Content.XamlRoot, ... };
await dialog.ShowAsync();

Notifications

UWP WinUI 3
Windows.UI.Notifications.ToastNotificationManager Microsoft.Windows.AppNotifications.AppNotificationManager
Windows.UI.Notifications.BadgeUpdateManager Microsoft.Windows.BadgeNotifications.BadgeNotificationManager
Windows.UI.Notifications.TileUpdateManager Paneler är inaktuella – använd meddelanden eller widgetar
UWP WinUI 3
Frame.Navigate(typeof(MyPage)) Frame.Navigate(typeof(MyPage)) — oförändrad
SystemNavigationManager.BackRequested Hantera via NavigationView eller AppWindow
Windows.UI.Core.Preview.SystemNavigationManagerPreview AppWindow.Closing evenemang

Appens livscykel

UWP WinUI 3
Application.Current.Suspending Microsoft.Windows.AppLifecycle (kräver arkitekturändringar – se anmärkning)
Application.Current.Resuming AppInstance.GetCurrent().Activated (se anmärkning)
BackgroundTaskBuilder Windows App SDK bakgrundsaktiviteter

Note

WinUI 3-applivscykelmigrering är inte ett enkelt API-namnbyte. Windows App SDK använder en annan aktiverings- och fjädringsmodell. Betrakta kod för livscykelhantering som något som kräver en särskild omskrivning snarare än automatiserad ersättning. Se dokumentationen om Windows App SDK livscykel för den fullständiga modellen.

Inställningar och lagring

UWP WinUI 3
ApplicationData.Current.LocalSettings Oförändrad
ApplicationData.Current.LocalFolder Oförändrad
Windows.Storage.KnownFolders Oförändrad

API:er som inte ändras

Windows.Devices.*, Windows.Media.*, Windows.UI.ViewManagement.UISettings, Windows.UI.Color och de flesta WinRT-API:er utanför XAML-namnområdet ändras inte.

Startprompt

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

Apply these substitutions:
- Windows.UI.Xaml.* → Microsoft.UI.Xaml.*
- CoreDispatcher / Dispatcher.RunAsync → DispatcherQueue.TryEnqueue
- ApplicationView → AppWindow + AppWindowTitleBar
- CoreWindow → Microsoft.UI.Xaml.Window
- MessageDialog → ContentDialog (set XamlRoot, not InitializeWithWindow)
- FileOpenPicker / FileSavePicker / FolderPicker → add InitializeWithWindow
- Windows.UI.Notifications → Microsoft.Windows.AppNotifications
- SystemNavigationManager.BackRequested → NavigationView back handling

Do not use any Windows.UI.Xaml.* namespaces in new code.
Do not use CoreDispatcher — use DispatcherQueue.
Flag any APIs without a direct WinUI 3 equivalent rather than guessing.

Ändringar i projektfilen

Ersätt UWP-målramverket:

<!-- Before (UWP) -->
<TargetPlatformVersion>10.0.19041.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>

<!-- After (WinUI 3) -->
<TargetFramework>net10.0-windows10.0.19041.0</TargetFramework>
<WindowsSdkPackageVersion>10.0.19041.31</WindowsSdkPackageVersion>

Lägg till Windows App SDK-paketet:

dotnet add package Microsoft.WindowsAppSDK