WPF will be community run project
twitter.com
twitter.com
Windows 10 was coming around corner with UWP being pushed as the big desktop app SDK. Then they ditched that because people just didn't like Windows Store and how they did the apps on it (I also wasn't big fan of it). Then everything went to extremely resource-hungry Electron. Now there is .NET MAUI and and some general WinUI framework [1].
I am utterly confused what is happening with UI development on Windows ecosystem. On rare occasion I want to develop desktop app, I have used Avalonia UI [2] which seems to be something more stable than what MSFT churns out every year or two, can highly recommend that.
Either way, they are really destroying Windows ecosystem by pushing out new framework every few years that always feels half-finished before they move on to the next one. This is, of course, on top of Windows versions in general with how they pile new half-finished UI reworks that just keeps piling on insane amounts of technical debt and legacy for future maintenance.
[1] https://learn.microsoft.com/en-us/windows/apps/winui/ [2] https://avaloniaui.net/
As you said MS is all in with React based development for UI nowadays. I read somewhere that new versions of Office 365 applications would be in React.
I'll believe that when I see it. I think performance is too important to do vdom reconciliation on every keystroke.
Many seem to be under the impression that there is thriving, competitive market for top rated UI frameworks. But I feel, in reality it is just Electron or bust. So even if laggards (like me) whine about crappy electron apps it is not like people who matter are going to listen and do something about it.
Then I stepped away from UI development for a few years. When I came back, WPF was in exactly the same state I left it, but we also had UWP.
I made one UWP app and decided to fully abandon Microsoft.
Microsoft is doing the same thing to the runtime, too. How many different versions of dotnet are there? Which one do you need? Are they interoperable?
I tried to build a little WPF tool as an internal widget at work. In total, there's five checkboxes, two textboxes, six combo boxes, a console shoved into a text panel, and a button. No textures or assets. I attempted to build it as a single executable for convenience.
What I got was a 140MB exe and a half dozen dlls.
Now I've decided to abandon C# entirely and move to something less awful. C# was my first real programming language, and it's always been the first thing I go to, but between Microsoft going downhill and all the technical issues, it would be less effort to learn Rust than to ever open visual studio again
Easy, .NET Framework is the Python 2 of the .NET world.
.NET Core, renamed to just .NET as of .NET 5, is the Python 3 of the .NET world.
Xamarin (mono), matters mostly when targeting iOS or Android, and some parts of it were used in Blazor AOT compilation infrastructure.
MDIL runtime was only for Windows 8.x, while .NET Native is only for Windows 10 UWP workloads.
Unity uses mono for interactive development, IL2CPP for production deployments, and the HPC# subset with Burst compiler for DOTS.
Yes there are plenty, but so there are C, C++, Java, Python, Ruby,.... implementations.
What really killed the appeal of C# and windows was my recent experiences with Bluetooth. My job is building what is basically a Bluetooth game controller. The options on windows are the C++ WinRT library, a wrapper around that library in your chosen language, or the UWP libraries (which I suspect are still just WinRT).
I started building a dll to handle the UWP functions so that I could use them from our other infrastructure. But no, a UWP library can only be referenced by a UWP application. The alternative is to run it through IL2CPP, which is where I gave up.
I really enjoy C# as a language, but I'm so goddamn sick of Microsoft that it isn't fun to use anymore.
Yeah they really made a mess of that a few years ago, but it's sorted out now. As of .NET 5.0 it's just .NET, no more core or framework.
Almost anyone could build a data bound app ages ago - then they burnt this all on a WPF / UPF / silver light etc bonfire.
Back to the electron apps I go
People wonder why the company hasn’t failed yet, it’s due to the incredible power of inertia. But even inertia runs out eventually - it’s a slow process but it is happening.
They recently launched MAUI, their new new new cross platform UI framework and it feels very unfinished and “rushed out the door”. Meanwhile they are announcing end of life dates for what MAUI supposedly replaces (eg Xamarin).
So the choice currently is a promising but very unfinished brand new cross platform UI framework - which I would argue is entirely not production ready - or the old approach which now has a ticking expiration clock on it.
I too end up back on Electron by default at the moment.
- documentation is lacking
- open popups overlay EVERYTHING even windows from other applications
- no easy way to create a component with a XAML template
- no way to set dimensions to a proportion of the parent dimension
Grid's rows and columns are proportional. Or do you mean something else?
C# has been pretty great to work with. (Updating from framework to NET 6 has been a slog though)
Anything to do with the WPF and the UI just seems way too complicated. I can 100% understand why electron has taken over.
Keeping my eye on blazor for desktop as I think that would be ideal.
I've found that doing WPF well requires very careful setup of your architecture.
My biggest piece of advice; unless it's a simple CRUD app learn how to use the Dispatcher and pick how you want to handle background work. Especially if you're doing anything like WebSockets/SignalR.
In my case I was on a deadline so I just pulled Akka.Net in and set up an actor to handle outbound and an actor to handle inbound. It made things -so- much easier to reason about, even if it was a bit of a 'bulldozer making a sand-castle' moment. OTOH it did also make the UI much more responsive so I have no regrets.
WPF had some nice points. My first WPF app was actually a simple 'form' that field workers could use to fill out pole survey data. They'd send the files back to us, we could load the data in, finalize/check it... then run some funky flow that saved the screen as an XPF before converting to PDF. the 'fanciest' thing it did was look up a google maps image for a lat/lon and add it in.
But when I tried to convert all of my existing winforms stuff to WPF (Fun tools that used COM to talk to CAD programs) It was a living nightmare and I gave up pretty quick (The winforms stuff worked, it worked well, and at the time WPF had caching issues that caused long cold starts anyway.)
Hopefully Blazor works out. I'm hoping the internal inertia at Microsoft is in that direction (i.e. I think theres rumblings about Office moving to React, but perhaps Blazor would be a better option, I think it would be great for PowerApps.)
But really, Microsoft lost the plot somewhere after VS2010 on Desktop/Productivity building.
Workflow Foundation is a good example. Frankly, it was pretty powerful as far as what it could do, But it was clunky as hell, slow, and the overall API needed a good spit and shine (perhaps an easy way to do things in a more declarative way via code.)
Come and think of it the time after that was when it became obvious Microsoft's lunch was starting to get eaten by Python, Ruby, and JVM ORMs, to say nothing of everything happening on the mobile side and the implications for devshare. (To be clear; I'm a Windows Phone apologist, Ironically the platform had a great focus on app-level privacy and sandboxing compared to competition. But it, like WinUI, stole resources from more 'global' solutions.)
So it got quietly pushed to the side, used by others with the time to build some cool things (SSIS packages are similar in concept and somewhat workable,) and inspired/powered a wave of overpriced low/no code tools.
Much better investing that time in the actual tools that devs use, VS Code and Chromium.
AvaloniaUI and Uno have been around for YEARS now, and could have used this announcement earlier to get more inertia behind them.
You see this in several community talks, where .NET old timers ask about feature X in framework Y being available on framework Z, and many times they don't really understand what is being talked about.
Most Microsoft veterans are now on Azure or Windows Server business units.
However they are community projects.
From Microsoft, maybe MAUI one day gets to support Linux, which again, uses its own XAML flavour due to its Xamarin origins.
I can see the money is in the cloud and I don't complain from my KDE desktop, but from a distance it looks quite radical to see them throw their crown jewels into the river.
It hasn't served them well with WinUI (I tried it, but the versioning hell was too much.)
That said, They over-compensated for over-focusing on desktop pre 2012ish.
And now, they are acting completely silly in regards to MAUI (supporting Windows, Android, iOS, macOS, but -not- linux)
There were quite some rough edges, especially surrounding dependency properties. Those had way too much boilerplate. Also their hip new event system needed some fine tuning too.
I wrote a bit about this recently: https://www.reillywood.com/blog/windows-ui-frameworks/