Databinding is a complete trainwreck, the Combo-box class is horribly overcomplicated by its double-duty as text-entry and drop-down-list, the DataGridView is a complete beast of leaky abstractions, and the layout engine completely falls apart if somebody alters the DPI unless you obsessively test DPI alterations yourself.
I don't blame Microsoft for any of this - it was 2000 and they were making a wrapper around some terrifying legacy code.
But this thing should have been tossed in the dustbin of history a long time ago.
Data binding is not solid, but it is a quick hack to display data, the solution is using a business model and mvp or mvc.
What do you find complicated about the combo class?
Data grid view... It is a train wreck, but then again, there is not much need to use it if you have a proper model behind.
The layout engine does sucks... The only alternative I found is to use the dev express layout control. The rumor is that 4.6 solves this.
Win forms is solid and it has very little chance of disappearing. Areas of the screen can be controlled independly, which means ui encapsulation is there... Something not easily done in html.
Have you tried building GUI apps in Racket? That's the sort of thing I was wishing for when using either Java or .NET to build Windows GUIs.
A trivial example:
#lang racket
(require net/url
racket/gui/base
racket/sandbox)
(define (menu-file-exit-click item control)
(exit 0))
(define frame
(new frame% [label "Demo"] [height 480] [width 640]))
(define menu
(new menu-bar% [parent frame]))
(define menu-file
(new menu% [parent menu] [label "&File"]))
(define menu-file-exit
(new menu-item% [parent menu-file] [label "E&xit"] [callback menu-file-exit-click]))
(send frame show #t)
... is all you need to create a basic GUI app with a File -> Exit menu option. And that really is all there is - no resource compilation, no code-behind, no separate languages for expressing the UI and the actions connected to it.WPF and UWP apps are both far easier.
I've tried to use WPF and it was just a major pain and felt like a mess. There is no impediment to "responsiveness".
Where did you get the idea winforms apps don't follow the system colors?
Maybe in the Windows XP era. None of the built-in apps in Windows 10 look like Win32 apps, apart from legacy stuff that hasn't been ported yet and now looks sorely out of place.
https://msdn.microsoft.com/en-us/library/dn894631.aspx?f=255...
Much of the Windows shell isn't even written in Win32 anymore, it's all UWP (source: I work on the start menu).
Does WinForms still get love in the new versions of the SDK or is it considered done now?
(There still are bugs around, but I think they will not be addressed ever. Fixing those could potentially break existing applications relying on that behaviour.)
Databinding is not a leaky abstraction ,it's a fucking flood abstraction.
Probably the most infamous one is that the WPF listview with multiple select enabled doesn't allow you to bind to the collection of selected items. Instead you have to do all sorts of work arounds, that while individually aren't too bad, when put all together, makes all the other hard work you put into doing MVVM on the components that you fully control super frustrating.
You hit the nail on the head with this. This is why I don't like to use WPF outside of writing small utilities.
Databinding is indeed a leaky abstraction, but at the same time it's a very powerful one. I'm willing to learn the inner workings of the binding system to avoid performance pitfalls and other weirdnesses. I'm also willing to continually wrap all sorts of not MVVM-ready components to make them data-binding friendly. When people talk about databinding being a leaky abstraction, what I hear is "I was promised magic and it's not actually magical."
Also - there's many different approaches to how it's done with various tradeoffs. Compiled bindings on Android and the new Windows platforms look interesting, and you should also check out how ReactiveUI approaches it.
In the end though, I've never been able to achieve a satisfactory level of loose coupling, testability, and portability without databinding. Despite the overhead and occasional surprises, it's paid off in spades as far as quality and productivity.