WPF is Microsoft’s latest, greatest means for developing a graphical user interface for desktop applications, which is one reason to learn it, but in my initial research on the topic I came across a few others that are worth mentioning. Why learn WPF?
- Broad integration – WPF makes it straightforward to work with 3D graphics, video, speech, rich document viewing, etc. all in one app.
- Resolution independence – if you have a graphics-heavy app, whether it be fancy backgrounds, skins, and buttons or lots of charts, graphs, or 3D modeling, you’ll like WPF. It makes use of vector graphics, which means scaling for different screen resolutions becomes a non-issue.
- Hardware acceleration – WPF is built on top of Direct3D, so again, that’s good for graphics.
- Declarative programming – The XAML language is nice for the developer, allowing you to quickly lay out an app and make changes to it.
- Rich composition and customization – The WPF model gives the developer a lot of control over the look and feel of just about every aspect of the GUI. It makes use of templates and chains of inheritance for styles, which makes it easy to change the look of an app or apply skins.
My current motivation for wanting to learn WPF is my search for a quicker way to put together apps for my engineering clients. For the most part, they request desktop apps that involve working with data that represents some physical phenomena, graphing the data in some form or another, querying the data, and performing calculations with the data. I feel as though the "hard" part of my clients’ requests should be figuring out the calculations and coming up with clear, concise ways of presenting their data. But in reality, I spend a lot of time on the GUI, programming buttons and list views and tree views and the like. This takes time away from the "interesting" problems. I’m hoping that WPF will help me out a bit.
So initially, I want to learn how to lay out a typical engineering app with WPF, figure out some of the graphics functionality, get started with Model-View-ViewModel architecture (because I’ve heard from my colleagues that this is the way to go when architecting a WPF app), and put together a basic toolbox that I can share with my clients when we start a new app from scratch.