Six years of Windows Presentation Foundation: What’s changed? (2012)
paulstovell.com
paulstovell.com
Eventually, they'll say that VS is dead and VSCode is the new VS, then we'll be off WPF and win32 ties, it'll also put to bed the "Why is VS not 64bit yet?" line of inquiry.
I'm guessing that with the Longhorn disaster WPF lost whatever resources it was going to get to make it really kick ass.
If your goal is to write .NET (C#, F#, VB.NET, what have you), ReactXP doesn't help. UWP XAML is the answer people seem to be looking for but for whatever reason keep missing it as the successor to WPF.
If you are already using patterns like MVVM, databinding, service models, and keeping business logic separated from UI/UX logic, the transition should be mostly seamless from what I've seen outside of a few XAML tweaks (which are primarily fiddly details like namespace changes).
In the case of more complicated migrations, you can now use the Desktop Bridge: https://docs.microsoft.com/en-us/windows/uwp/porting/desktop...
For line-of-business apps it's DOA because ADO.NET is not available. Custom widgets (e.g. for industrial control) are much harder to develop because there's no replacement for GDI. The list goes on. UWP is, and was intended to be, only a platform for "apps" which act as a frontend for externally hosted web-services - not "real software".
What we should be campaigning for is for the XAML "Jupiter" platform within UWP to be made fully available in the pure Win32 world, with no special runtime, sandbox, or artificial restrictions.
- It wasn't a good idea even in WPF to use an hWnd directly
- There is a full file browser available to UWP apps since Windows 10
- The application design guidelines are much less prescriptive since Windows 10
- There's nothing saying you can't use a tree view, just a warning that most users don't like tree views and tree views are typically not very accessible (to users with disabilities, to users that prefer touch controls, to users that hate navigating useless hierarchies)
- DirectX has been the suggested replacement for GDI since WPF launched, UWP just enforces it; UWP XAML even has more and better ways to composite DirectX and XAML layers together
- That stated, System.Drawing is higher level than just GDI, and is missing today. This is also an issue faced by .NET Core in general. There are open source System.Drawing replacements available today. .NET Core should have one more directly in .NET Standard 2.0/.NET Core 2.0 soon (and UWP once .NET Native pulls that in)
- The "desktop bridge" allows full Win32 processes to bundled with an application
- The full jungle of ADO.NET is an issue, but it's the same issue being faced across all of .NET Core: it's expected to get better with .NET Standard 2.0/.NET Core 2.0 soon and the .NET Native that pulls that in
- Even "real software" needs sandboxes for security and reliability. That was the complaint with UAC in Vista; that's the same complaint here. Exactly like with UAC the UWP sandbox started (back in the "WinRT days" in Windows 8) from a position of strength and is slowly working to strike a balance for "real software" to run but also be secure and easy to install/uninstall
From a lot of the .NET side of complaints, the "artificial restrictions" are primarily the transition to .NET Core. Yes, it's a sometimes painful transition for legacy WPF applications, but it's a lot better than the WPF/Silverlight transition and it's a transition that will continue to get better as .NET Core grows. A lot of the complaints about .NET Core in general are going to go away with .NET Standard 2.0/.NET Core 2.0, which will converge a lot more of the "classic .NET Framework" into/on top of .NET Core.
Anyway, here's a product I've come across a few times which might address some of the authors' concerns (was a paid product, but it recently went free): http://www.ammyui.com/
I didn't see a contact email on your profile but here are a couple projects that could use some help:
https://github.com/ArthurHub/HTML-Renderer (looking for contributors actually)
https://github.com/bricelam/ImageResizer
https://github.com/Tyrrrz/LightBulb
https://github.com/Mikescher/AlephNote
There are also frameworks/toolkits like ReactiveUI, MahApps, etc. that could also use some help, if you want to contribute there.
>WPF on the other hand hasn't had a major change since 2006.
WPF (v1 not beta) was released November 2006. I'm sure that at that moment in time, Microsoft did have optimistic visions that WPF would be widely adopted like Winforms and VB6 Forms before. In 2006, WPF was prominent in MS's strategy. But by 2012, it' wasn't.
What changed Microsoft's direction? What did Microsoft not know in 2006? What they didn't know was that 2 months later, Steve Jobs would show the first iPhone. That changed everything.
Before the iPhone in 2007:
- Research In Motion and Google's Android (1st prototype) thought smartphones would be half-screen, half-buttons.
- "fat clients" with rich runtime plugins like Adobe Flash and MS Silverlight would be dominant
- there was no significant application development & distribution platform on mobile phones (yes, Nokia had a SDK, and Microsoft had something for Windows CE but neither gained any significant mindshare)
If we look at the macro trend, the ongoing investment in WPF assumed that desktop apps would be dominant in developer mindshare (either Silverlight or traditional desktop exe files). With the rise of iPhones/Android, it was HTML5 & Javscript that was aggressively enhancing their capabilities. The rising marketshare of Google's Chrome (2008) with the V8 Engine and Mozilla Firefox improving their Javascript performance also contributed to WPF's abandonment. For native apps on smartphones, developers en masse were more interested in Apple Objective-C or Android Java. HTML5+JS+ObjC+Java all gained mindshare at WPF's expense.
Microsoft didn't instantly declare WPF "dead" in 2007 but abandoned it in gradual steps. E.g. the conferences PDC2009, PDC2010 had prominent WPF presentations but the later Build conferences do not. It also didn't help that the first WPF release didn't have masked-edit controls, didn't have a datagrid, and didn't have a good UI designer (Expression Blend purchased separately?). VB6 in 1995 had masked-edit controls but WPF didn't?!? WPF was also very slow even though they touted the underlying DirectX technology. (E.g. Evernote abandoned WPF for C++ WTL.)
If you're a developer that wants to code a brand new WPF application today, that's ok but don't expect MS to release new exciting enhancements for it.
Today, innovation iteration on desktop GUI libraries are happening faster on Qt for C++ and React/Electron for Javascript.
But I actually like writing XAML by hand.
The GUI-based GUI designers I've tried were never very good about expressing the subtleties and details that you have to deal with if you hope to make a professional-grade result.
GUIs that are good at specificity and detail also tend to be quirky and difficult (think CAD systems).
The fact that XAML is so closely tied to the actual structures you're creating means you learn the language and its domain together. And you can trivially re-use or re-purpose chunks of XAML by copying, pasting, editing.
I understand you like writing a UI by hand, and it's always good when a UI has a human-editable text form (if XML counts :))
But in general: it's 2017. The fact you're writing about the need to design a UI by text is extraordinary, and so, so far behind other tools.
There are a few products for React/HTML/JS that let you create web ui's via a gui interface, but they're not really all encompassing.
I'm just hoping that Microsoft, or somebody else, will create a cross-platform GUI toolkit.
The good news is that it exists. The bad news is that it's HTML/Javascript.
There is FireMonkey. Windows, iOS, Android and macOS. Native controls on Windows and iOS, and on the roadmap for the others. Themeable, vectorized, GPU-powered, data bindings, and can be used from C++ via C++Builder, or Delphi if you want a more C#-like language.
Here's a random video about the live preview (where you plug in a device and see live as you edit the UI in the IDE what it will look like on that device): https://www.youtube.com/watch?v=bU_J3WxeClI Plenty of other videos online too!
(Note: I am not neutral, I am employed by the company that makes it.)
I've been trying to implement MVVM using a 2009 MSDN Magazine article "Patterns - WPF Apps With The Model-View-ViewModel Design Pattern" [1] as a guide.
Are there any decent MVVM frameworks or patterns that are worth investigating?
[1]: https://msdn.microsoft.com/en-us/magazine/dd419663.aspx
The work on wpf was 'finished'. It's not abandoned, but there is no innovation in it anymore. They will keep supporting it, but are looking for a way to do it crossplatform, which isn't an option yet
I would love to be able to use Delphi/Firemonkey for that.
It certainly looks interesting.
Essentially Sciter is a crossplatform WPF but using HTML/CSS instead of XAML.
As for me (I am an author of Sciter) the biggest disappointment was the way how styles were implemented in WPF/XAML. Even in 2006 it was clear that style cascading (contextual inheritance) is the way to go. It appears as XAML was not designed from the very beginning to be human readable - just trendy ("XML everywhere" in 2006) replacement of VB's .FRM files. .FRM files were even more human readable/editable ( notation was quite close to YAML).
The UWP XAML stack has been the successor to WPF for a while now.
Windows 7 is the outlier, but this isn't that much of a different argument from the complaints that Windows XP had terrible out-of-the-box support for WPF. The same arguments stopping people from using UWP today seem very deja vu to the arguments against WPF even back when in Windows 7.
UWP XAML isn't even that different from WPF XAML. I've got a feeling for some LOB applications maintaining a UWP and WPF build side-by-side is relatively straightforward (and definitely more straightforward than those of us that for various reasons worked on side-by-side XAML builds for WPF and Silverlight).
Anyway WPF is workable - far from perfect, but you can actually get the stuff done with it. It is also quite flexible and performant if done right.