Eseguire la migrazione di un'app macchine virtuali Windows a WinUI 3

Le app macchine virtuali Windows vengono eseguite su .NET, ma utilizzano lo stack XAML di Windows Presentation Foundation. WinUI 3 è la sostituzione moderna. La sfida principale per la migrazione dell'intelligenza artificiale è che macchine virtuali Windows usa spazi dei nomi System.Windows.* mentre WinUI 3 usa Microsoft.UI.Xaml.* e molti controlli e API di windowing richiedono sostituzioni mirate anziché semplici operazioni di ricerca e sostituzione.

Installare la funzionalità di migrazione macchine virtuali Windows

gh copilot plugin install winui@awesome-copilot

Tabella di sostituzione API

Namespaces

macchine virtuali Windows 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.*

Controlli

macchine virtuali Windows WinUI 3 Notes
Window Microsoft.UI.Xaml.Window Superficie dell'API diversa
Grid, StackPanel, Canvas Invariato Stessi nomi
TextBox, Button, CheckBox Invariato Stessi nomi, stile WinUI
ListBox / ListView ListView Usare ItemsView per il nuovo codice
DataGrid DataGrid (CommunityToolkit) Aggiungere CommunityToolkit.WinUI.Controls.DataGrid
TabControl TabView API diversa
Menu / MenuItem MenuBar / MenuBarItem
ToolBar CommandBar
RichTextBox RichEditBox
WebBrowser WebView2 API diversa, asincrona

Gestione dei thread

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

Gestione delle finestre e DPI

macchine virtuali Windows WinUI 3
Window.WindowState AppWindow.Presenter (usare OverlappedPresenter)
SystemParameters.WorkArea DisplayArea.GetFromWindowId(...)
PresentationSource.FromVisual() WinRT.Interop.WindowNative.GetWindowHandle(window)

associazione dei dati

macchine virtuali Windows WinUI 3
INotifyPropertyChanged Invariato
ObservableCollection<T> Invariato
{Binding} {x:Bind} preferito (in fase di compilazione)
DependencyProperty Invariato
IValueConverter Invariato

Risorse e stili

macchine virtuali Windows WinUI 3
ResourceDictionary Invariato
StaticResource Invariato
DynamicResource {ThemeResource} per i colori di sistema
SystemColors.WindowBrush {ThemeResource SystemFillColorSolidNeutralBrush}

Prompt di avvio

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.

Modifiche ai file di progetto

<!-- 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 di cui non viene eseguita la migrazione diretta

Indicare all'agente di contrassegnare questi elementi invece di indovinare:

  • livello macchine virtuali Windows Adorner - nessun equivalente in WinUI 3
  • macchine virtuali Windows FlowDocument / DocumentViewer : usare RichEditBox per il contenuto modificabile; nessun visualizzatore equivalente
  • macchine virtuali Windows Viewport3D — usa l'interoperabilità con Win2D o DirectX
  • Hosting air-space/HWND: usare SwapChainPanel o modelli di interoperabilità Win32