WPF uygulamasını WinUI 3'e geçirme

WPF uygulamalar .NET üzerinde çalışır ancak Windows Presentation Foundation XAML yığınını kullanır. WinUI 3, modern bir değişimdir. AI geçişinin temel zorluğu, winUI 3 System.Windows.* kullanırken WPF Microsoft.UI.Xaml.* ad alanlarını kullanması ve birçok denetim ve pencereleme API'sinin basit arama ve değiştirme yerine hedeflenen değiştirmelere ihtiyacı olmasıdır.

WPF geçiş becerisini yükleme

gh copilot plugin install winui@awesome-copilot

API değiştirme tablosu

Namespace'ler

WPF (Windows Presentation Foundation) 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.*

Denetimler

WPF (Windows Presentation Foundation) WinUI 3 Notlar
Window Microsoft.UI.Xaml.Window Farklı API yüzeyi
Grid, StackPanel, Canvas Değişmemiş Aynı adlar
TextBox, Button, CheckBox Değişmemiş Aynı adlar, WinUI stili
ListBox / ListView ListView Yeni kod için kullan ItemsView
DataGrid DataGrid (CommunityToolkit) CommunityToolkit.WinUI.Controls.DataGrid ekle
TabControl TabView Farklı API
Menu / MenuItem MenuBar / MenuBarItem
ToolBar CommandBar
RichTextBox RichEditBox
WebBrowser WebView2 Farklı API, asenkron

İplilik

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

Pencereleme ve DPI

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

Veri bağlama

WPF (Windows Presentation Foundation) WinUI 3
INotifyPropertyChanged Değişmemiş
ObservableCollection<T> Değişmemiş
{Binding} {x:Bind} tercih edilen (derleme zamanı)
DependencyProperty Değişmemiş
IValueConverter Değişmemiş

Kaynaklar ve stiller

WPF (Windows Presentation Foundation) WinUI 3
ResourceDictionary Değişmemiş
StaticResource Değişmemiş
DynamicResource {ThemeResource} sistem renkleri için
SystemColors.WindowBrush {ThemeResource SystemFillColorSolidNeutralBrush}

Başlangıç istemi

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.

Proje dosyası değişiklikleri

<!-- 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

Doğrudan taşınmayan API'ler

Temsilciye, tahmin etmesi yerine bunları işaretlemesini söyleyin:

  • WPF Adorner katmanı — WinUI 3'te eşdeğeri yok
  • WPF FlowDocument / DocumentViewer — düzenlenebilir içerik için RichEditBox kullanın; görüntüleyici eşdeğeri yok
  • WPF Viewport3D — Win2D veya DirectX birlikte çalışabilirliğini kullanın
  • Air-space / HWND barındırma — SwapChainPanel veya Win32 birlikte çalışabilirlik düzenlerini kullanın