Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
Adornerkatmanı — WinUI 3'te eşdeğeri yok - WPF
FlowDocument/DocumentViewer— düzenlenebilir içerik içinRichEditBoxkullanı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 —
SwapChainPanelveya Win32 birlikte çalışabilirlik düzenlerini kullanın
İlgili içerik
Windows developer