WPF modernization and WPF migration are different projects. Modernization keeps the app on WPF and brings it forward (.NET 10 LTS, Fluent theme, AI tooling). Migration leaves Windows-only for new platforms on a different XAML dialect. They have different scope, budget, risk, and reversibility. Naming which one you are doing is the first decision that matters in 2026.
Why the Distinction Matters
The single most expensive WPF scoping mistake in 2026 is treating these as the same project. Teams budget for "modernization" and discover three months in that they are halfway through a cross-platform rewrite. Or they budget for a full migration and learn the actual trigger was solvable by upgrading to .NET 10 and turning on the Fluent theme.
The trigger picks the project. The project picks the framework.
| Project | Trigger Pattern | Scope | Reversibility |
|---|---|---|---|
| Modernization in place | "WPF feels old" / "we are stuck on .NET Framework" / "the UI looks dated" | Stay on WPF, upgrade .NET, adopt Fluent and AI tooling | High: every step is incremental |
| Migration | "We need this on Mac/Linux/web/mobile" / "MSIX deployment is blocking us" | Leave Windows-only, adopt a new XAML surface, rebuild platform-specific code | Low: framework choice is sticky |
If your trigger is a vibe (the app feels old), you almost certainly need modernization-in-place, not migration. If your trigger is reach (a customer needs Mac), you almost certainly need migration.
What Modernization-in-Place Gets You in 2026
Microsoft is still shipping WPF, but the trajectory is maintenance, not active feature growth. The investment curve is flattening release over release. That is enough to make stay-on-WPF a credible 2026 path; it is not enough to call WPF a forward-looking strategy.
- WPF on .NET 9: Introduced the Fluent theme for Windows 11 aesthetics, light/dark
ThemeMode, Windows accent color support, hyphen-based ligature support. .NET 9 is Standard Term Support and reaches end of support on November 10, 2026. It is no longer a realistic target for new modernization work. - WPF on .NET 10: Extended Fluent style coverage (DatePicker, GridSplitter, GridView, GroupBox, Hyperlink, Label, NavigationWindow, RichTextBox, TextBox), unified clipboard API, performance improvements. .NET 10 is the current LTS, supported until November 14, 2028. This is the version any 2026 modernization should target.
- WPF on .NET 11 Preview 3: Bug fixes (DWM crash guard, Fluent backdrop fix on Windows 10, weak event table purge fix). No new features in this preview.
- GitHub Copilot Modernization: WPF as a first-class project type with upgrade paths from .NET Framework, .NET Core 1.x-3.x, and .NET 5+ to .NET 8 or later.
Concretely, a modernization-in-place project looks like:
- Upgrade .NET Framework (or end-of-life .NET versions) to .NET 10 LTS with Copilot Modernization. Do not stop at .NET 9: with end of support on November 10, 2026 and typical WPF modernization timelines measured in months, .NET 9 is a risky target by the time most teams would actually ship.
- Apply the Fluent theme via
ThemeModeor merging the resource dictionary. - Address
BinaryFormatterremoval per the WPF migration guide. - Adopt AI-assisted tooling for ongoing development.
- Pay down architectural debt as a separate, lower-risk track.
The app stays on Windows. The team stays on WPF. The XAML you wrote two years ago still works.
<!-- Apply Fluent theme at the application level -->
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>What Only Migration Solves
Modernization-in-place cannot solve any of the following. If your trigger is on this list, you are doing migration.
Cross-platform reach. WPF only runs on Windows. macOS, Linux, iOS, Android, and browser delivery all require a different framework.
Browser delivery. WebAssembly removes installer friction for many app categories. WPF does not target the browser.
Mobile tier reuse. Sharing ViewModels, services, and a substantial portion of XAML with iOS and Android requires a cross-platform framework. A practical caveat: most WPF line-of-business apps are forms-over-data with no service or API layer. The data access lives directly behind the UI. Cross-platform reuse depends on first extracting that layer, and that extraction work is a real (and often understated) line item in any cross-platform business case.
MSIX or installer fatigue. When deployment is the bottleneck, browser or per-platform stores often beat fixing MSIX.
Hardware that is not Windows. Linux desktops, kiosk devices, and embedded targets run a different runtime story.
If none of these apply, you do not need migration. You need modernization.
Cost and Risk Profile
| Dimension | Modernization in Place | Migration |
|---|---|---|
| Typical effort | Days to a few weeks per upgrade phase | 2 to 18 months depending on size and platform breadth |
| Tooling | Copilot Modernization, .NET upgrade tools | Cross-platform framework, agentic dev loop, runtime verification |
| Risk profile | Low: every step ships independently | Medium to high: framework choice is sticky |
| Team change | Same team, same skills | Same .NET skills, new XAML dialect, new platform-specific code |
| Reversibility | High | Low once the new XAML surface is adopted |
Migration is not always more expensive in total, but it is always more expensive to course-correct. That is why naming the project up front matters.
Migration is more expensive than modernization, but the gap has narrowed sharply. AI-assisted dev now absorbs a large share of the mechanical work (namespace swaps, binding rewrites, control mapping, boilerplate XAML translation). What used to be the dominant cost line is now compressed. The cost of "more expensive" is no longer the cost it was. See .NET Agent Skills and Migrate Your First WPF Screen with AI Agents for the pattern.
How to Decide This Week
Three questions, in order:
- Is there a real platform-reach trigger? A specific customer asking for Mac. A regulatory requirement to ship on Linux. A product mandate to deliver via the browser. If the answer is no, you are doing modernization.
- Is there a real deployment trigger? MSIX is blocking enterprise rollout. Per-machine install is blocking inside-the-firewall adoption. If yes, that justifies migration. If no, modernization.
- Is there a tooling or talent trigger? New hires expect Hot Reload, runtime designers, AI-assisted dev. Modernization can deliver Hot Reload and Copilot. Runtime visual designers across platforms (e.g., Hot Design) and runtime verification via MCPs require a framework that ships them. This sometimes tips the answer toward migration, but rarely on its own.
If two or three of these are yes, migration. If only one is yes and it is the third, run a 2-week pilot before committing.
What "Stay on WPF" Looks Like in 2026
For many WPF applications in production today, the right answer is to stay on WPF. The case is straightforward, with one honest caveat:
- WPF is being shipped, but the trajectory is maintenance. .NET 9 added the Fluent theme. .NET 10 (LTS, supported until November 2028) extended Fluent coverage and added clipboard and performance work. .NET 11 Preview 3 is bug fixes only. Treat WPF as supported and stable, not as a roadmap framework.
- The tooling story has caught up. Visual Studio Hot Reload, Copilot Modernization, and the Live Visual Tree all support WPF.
- The Fluent theme closes most of the visual-modernization complaint.
- The .NET 10 LTS upgrade closes the security and performance complaints for the next two-plus years.
If you do not have a platform-reach or deployment trigger, modernization-in-place is the cheapest, lowest-risk answer. Spend the migration budget on architectural debt instead.
What "Migrate" Looks Like in 2026
If migration is the right call, the credible 2026 targets are WinUI 3 (Windows-only modernization to a new XAML), Uno Platform (cross-platform on the WinUI 3 API surface across six platforms), independent cross-platform XAML stacks (with their own dialects and optional commercial WPF-compatibility forks), and .NET MAUI for mobile-first apps that do not need Linux.
The full comparison table and decision tree are in the companion article: WPF Modernization in 2026: A Source-Backed Decision Guide.
If you are leaning migration, port one representative screen end-to-end using the agentic dev loop (Migrate Your First WPF Screen with AI Agents) before committing to a framework.
- WPF on .NET 9 (Microsoft Learn) →
- WPF on .NET 10 (Microsoft Learn) →
- WPF on .NET 11 Preview 3 →
- .NET Lifecycle Page →
- WPF Overview (Microsoft Learn) →
- GitHub Copilot Modernization →
- BinaryFormatter WPF Migration Guide →
- How to Scope a WPF Migration →
- .NET Agent Skills →
- Migrate Your First WPF Screen with AI Agents →
- Uno Platform Hot Design →
- Uno Platform MCP Servers →
- Uno Platform for WPF Developers →
Subscribe to Our Blog
Subscribe via RSS
Back to Top