In 2024, Microsoft brought the Windows Presentation Foundation (WPF) back from the dead as part of .NET 9, adding Windows 11 theming support and a few other improvements. But its work was half-assed, with many bugs and functional omissions, including some I experienced and documented as part of my .NETpad modernization efforts. And so my hope for 2025, as I continue that work, is that Microsoft will address at least some of the many problems it introduced and advance WPF further, making it even more of a viable option for developers looking to create or update Windows apps.
I know. Naive.
What's the saying about doing the same thing repeatedly and expecting a different outcome? I went into my .NETpad modernization work full of excitement, expecting Microsoft to follow up its initial pre-release support for WPF Windows 11 theming with more new features and improvements and, as importantly, the documentation to back it up. And so I plowed forward, knowing it could only get better.
It never got better.
Microsoft released its initial support for WPF Windows 11 theming in .NET 9 Preview 5 the week of Build 2025 ... and then never once provided any further documentation or functional updates. It pushed forward with a steady cadence of .NET 9 preview releases throughout the summer, and then a series of release candidates that fall. But it never once updated WPF or its support for Windows 11. Not once.
So I did what I could. I focused on what I could get done in 2024 with the tools Microsoft provided, bugs and all. And by the time .NET 9 arrived right on cue in November, I was resigned to what I still see as an unprofessional lack of documentation and support. But I was surprised to discover that Microsoft finally documented a few additional features for WPF developers targeting Windows 11 theming in the initial stable release of .NET 9. And then further surprised when I discovered a few other changes, including the ability to change the app theme dynamically at runtime, a key feature I needed.
I'm not a professional developer, a point I try to drive home every time I tackle a particularly thorny topic. And after discovering the aforementioned feature, I was surprised to discover that .NETpad crashed repeatedly when I implemented it in the app. Naturally, I assumed it was me. And I spent (wasted) weeks, literally, trying to figure out what I had done wrong. Eventually, I discovered that it was tied to the WPF Expander control I was using--because that's what Notepad uses, God damn it--in the settings interface. If I changed the app theme dynamically at runtime while using (or, oddly, after using) an Expander, it would crash. If there was no Expander, it worked fine. Huh.
I Googled this, as one would. And I what I eventually learned was that this was Microsoft's fault: The bug was in the WPF code tied to Windows 11 theming. Microsoft acknowledged the bug, fixed it internally, and marked the issue closed. So I asked, "where" was...
With technology shaping our everyday lives, how could we not dig deeper?
Thurrott Premium delivers an honest and thorough perspective about the technologies we use and rely on everyday. Discover deeper content as a Premium member.