Transitioning from Windows Forms to WPF - c#

For a long time now, I have been stuck with Windows Forms development (started with VB6, and has continued through to C# .NET 4.5), and I have pretty much hit the limit of what Windows Forms can do, both using pure .NET, and special effects with Native Code.
I have tried to learn WPF and XAML, but I get stuck right at WPF's new designer. It really seems very difficult to use in comparison to the Windows Forms designer.
I want to know if there are any alternatives to .NET's WPF designer, that are more suited to Windows Forms developers?

I like to blog about beginner articles for WPF, and there are a few in particular that may help you out:
Understanding the change in mindset when switching from WinForms to WPF
What is this "DataContext" you speak of?
A Simple MVVM Example
To summarize, the biggest difference between Winforms and WPF is that in WPF your data layer (the DataContext) is your application, while in Winforms your UI layer is your application.
To look at it another way, with WPF your application consists of the objects you create, and you use Templates and other UI objects to tell WPF how to draw your application components.
That's the opposite of WinForms where you build your application out of UI objects, and then supply them with the data needed.
Because of this, the designer isn't actually used that much since your application components are designed in code, and the designer is only needed to draw a user-friendly interface that reflects your data classes (typically Models and ViewModels)
And personally, I prefer to type all my XAML out by hand since it's faster and doesn't make as much of a mess as the drag/drop WPF designer does, although I do use the Designer on occasion to preview what my UI will look like.
So to your answer your question about if there's other WPF designers suited for WinForms developers, I would suggest that instead of looking for another designer, instead look to learn how to use WPF in the way it's meant to be used. Using WPF like it's WinForms means you miss out on much of what makes it so great :)

Well although, some people don't agree, I would also recomment to not use the VS designer. At least not to create an interface. If you may want to get a first impression of your implementation without starting the application, it's a good viewer at least as long no sophisticated things like Styles and Templates are used. But, IMHO, its drag and drop result should only be used as prototype and therefore be discarded after it's no longer needed.
Here are some reasons which are important for me not to use it.
The VS designer is working with fix margins and alignments (which is usually not necessary, if you're using the layout controls), means you have to touch many controls, if the requirements are changed. If you're deep in XAML and the WPF mechanics you can create an applications which can be modified with small effort, regarding the look and feel.
Since the designer is generating the xaml, the composition is not optimal and the UI may perform badly. I didn't measure it, it's just a feeling.
A much better alternative is MS Blend, although the start is everything else but easy. Its drag and drop result is much better that the result of the VS designer.
But it's a pretty powerful tool, which helps you to use pretty powerful elements to create a state of the art UI. I recommend to visit at least a short workshop to get an idea of its opportunities.
Back to your question, IMHO, and I think many people agree, get yourself a good book e.g. WPF Unleashed and later, if you want to know more about the details, WPF Pro. There are a lot of features which are different to Winforms. You won't get to know them by using any designer. I think that's the best approach.
Please also consider that there are many frameworks and libraries (e.g. MVVM light, WPFToolkit) out there, which are already solving some common problems. So it's not necessary to reinvent the wheel.

I know this is an old question but for the benefit of anyone else looking at this, I think I should redress the balance a bit - reading some of the other answers, I get the feeling that some of the 'don't use the designer' sentiment comes from not using it properly.
This tutorial is quite good to get you going and answers some of the criticisms in the other posts.
For instance, you can switch from the Winforms-like margin-based layout that is the default when you drop a control, to a more WPF-ish style by right-clicking and selecting 'Reset Layout'
This video covers similar ground.
I still prefer the VS2010 designer on balance - VS2013 seems to be a bit buggy when dragging and dropping onto TabItems **, (which my current project uses a lot) - but the VS2013 Document Outline view lets you move things around in that view too, which can be a real plus.
Really, though, to get the most out of WPF and xaml you need to be reasonably fluent in both the designer view and the xaml view and switching between them; if you shy away from the designer, you are missing out on something that can help you a lot.
** Edit - although this seems to have been improved in Update 3 for VS 2013, and in previews of VS14, to date I still get odd behaviour at times.

First of all, in WPF (XAML) in Visual Studio deisgner, you should always use the xaml code to build you UI and do not drag and drop you control! You need to keep your code clean. You can use Expression Blend to help you, it's more graphic oriented with drag and drop, but it's not free.
It's not a big learning curve, but I think you should learn how to do your xaml by hand instead of searching for alternative.

I've been through this process as you did. Afterwards I was teaching everyone in my company WPF. There are a couple of important lessons I have learned and everybody I know who works with WPF.
If you are working with UI controls in the code behind, .... Then you are doing it wrong. There is absolutely no need for you to deal with UI controls in the code behind.
You do not need the visual developer for clicking on it. You are much more productive by only dealing with XAML.
Use Copy/Paste. Do not trust in your typing capabilities. It will save a lot of headaches.
Think of the XAML just as a window that loks over the data. In the code behind you are changing the data. In XAML you are defining how the UI will interpret the data.
Converters are amazing. As soon as you get a key amount of Converters, your productivity will rocket Sky high. They will take over the role of the crazy amount of control eventhandlers that hide or resize, or what ever about UI,
It makes UI development fun. Especially once you find out how it likes to play along with Asyc processes. It really takes away a lot of the headaches that were caused by Winforms.

Related

Making a Less Dated UI (WPF Frameworks)

With Windows 8 and Windows 10 out, the original set of WPF controls is beginning to look a little... dated. I'm looking for something else, something that fits a little better in the more modern UI designs.
I've looked at mahapps.metro and Modern UI, and those seem a little drastic to me. The TabControl is a perfect example -- I'm not fond of the unbounded blocks of text that both of those seem to use for tabs. I prefer a bounded box. On the other hand, in Windows 10 the default focused WPF window has a white background, while the unaltered WPF menu is has a gray background, which looks a little weird:
Does anyone know of any good toolkits for pre-styled WPF controls aside from the two I mentioned earlier? Or am I more likely to get what I'm looking for by mixing and matching -- a little mahapps.metro, a little default WPF, a little custom styling?
I'm not looking to reinvent the wheel here. I don't want to find myself endlessly writing new styles, templates, etc, and micromanaging the XAML. There's a lot of interesting code in my project, and writing hundreds of lines of XAML is not my idea of a good time. :)
If it matters (I don't think it will, but you never know), I'm using Caliburn.Micro for my MVVM framework.
Or am I more likely to get what I'm looking for by mixing and matching -- a little mahapps.metro, a little default WPF, a little custom styling?
Yes, probably. You won't likely find a toolkit that just make all built-in controls look exactly like you want :).
Another option may to be look into the Universal Windows Platform (UWP): https://learn.microsoft.com/en-us/windows/uwp/get-started/whats-a-uwp.
These are the new kind of apps that can run on any Windows 10 device including PC, tablet, phone, Xbox, HoloLens, Surface Hub and more. The controls have better support for touch and pen input and probably look more what you refer to as "modern".
WPF is still a great choice for developing traditional Windows desktop applications. And if you compare the look of the built-in controls to a classic desktop application like Visual Studio, they don't look that "out-dated". Different kind of applications serve different kind of needs and sometimes you want controls that are tailored for a user that always uses a keyboard and a mouse and sometimes you don't.

Creating your own forms designer

I would like start writing an application that will let my user design the interface by choosing some basic controls as Labels, TextBoxes etc. Once done I would like to save the layout in an xml file and be able later on runtime to reconstruct what user choose.
Is there anything similar ready and pre-made?
Can you suggest me the approach?
Any suggestion is welcome!
Cheers
Creating your own designer is a lot like building your own submarine in your basement. Programmers tend to take the quality of the Winforms or WPF designers as a standard of measure. Both are however the result of multi man-year efforts at Microsoft. Reproducing their work from scratch is a daunting task.
Best thing to do is leverage what's already done by them. Possible with the Winforms designer, this magazine article is excellent to help you get started. It is dated but I'm fairly sure it is still relevant, little has changed in Winforms in the past 6 years.

Dynamic user-interface, WPF or not?

I'm currently working at a application that helps people understand how to do there job. You can see it as a personal coach that guides them trough all the steps they need to do that no normal person could keep remembering.
In my previous application we had the ability to show the user up to 4 pictures (what proves to be more then enough). The application would load the data and see how many pictures where in every instruction and then sort out the picture in the best fitting way without messing up the scale and resolution of the pictures. This all was done with GDI+ and worked very well.
Ofc, change is something that always happens, my bosses came up with some great ideas. So they want to be able to see movies on the screen, animated gif's, 3D models that can rotate or animate. So I think we had pushed GDI+ to it's limits and it's time to look for something different.
I have heard and readed about WPF but have no experience with it. Is it even possible to do all what I ask in WPF? And what about the old picture-merging thing I wrote, can we also get it done in wpf? I tried to make some things working but I didn't went as smooth as I hoped.
I'm also concerned about the fact that the interface needs to be dynamic, the one moment it should be showing picture with some text above it, the other moment it should be showing another text with a video under it.
I would love to hear some opinions here and if you got some other suggestions I should look into pls tell me. Thnx in advance
PS: If WPF is the choice, should I convince my boss to change to .net 4.0?
Although my answer can be termed subjective, I find WPF better than GDI+ anyday. You can do everything you can in WPF which you have done/could do in GDI+ (apart from pure games/game engines). If you can afford the steep learning curve of WPF, I think it will be better investment as this technology is not going anywhere soon.
As for .Net 4.0, WPF 4.0 does introduces some important functions in 4.0 (specially easing functions for animations) but there is nothing you cannot do without if you are using 3.5. I won't recommend 3.0 though mainly because of performance in animations.
WPF is up to the task, but you could also check other options.
You could go web based, and have either an XBAP (WPF in the browser), or Silverlight/Flash app.
Silverlight/Flash doesn't require that much from the client (to install), and is easily updatable, and both can do the job.

How to move from WinForms to WPF

I used WPF very little before and some stuff seemed very different to achieve. Coming from a winforms background, what things will seem different and take you a while to figure out.
Off top of my head, I remember not being able to specify which nodes are selected in a treeview control the way it's done in winforms, if I am not wrong.
I remember the whole MVVM principle..
But its okay now.. we are bffs now! :)
Oh, where to begin? WPF and WinForms seem very different to me. The concept of defining layouts using markup is quite different, although similar to web development. The fact that you need to make an explicit choice of a layout container (for multiple elements) is novel. I remember trying to add a bunch of elements directly within a Window and getting very confused...
I think to take advantage of all that WPF has to offer, you need to have a WPF mindset. For example, you don't have to use styles, templates, and bindings, but those concepts are where the power of WPF lies.
As Daniel stated WPF is different and it needs a different Mindset. You have to forget all the UI side assumptions you made/learned while doing Winforms or other conventional UI side development
I have comeacross so many similar kind of questions in this site. Some interesting once are listed bellow. You can find many here.
What are the most common mistakes
made in WPF development?
How to begin WPF development?
When is Winforms the correct choice vs. WPF?
For your selected node in a treeview the ModelView ViewModel approach works well. People have worked out good design patterns now for this kind of thing making the process much more easy.

XAML Based Level Editor

I would like to create a level editor for Silverlight with XAML. What resources would be useful for research before starting such a project?
Here is some information to clarify.
I made 1 silverlight game and released it so far.
The I would like to have an overhead style action game. The map would be much larger than the current viewable space.
WPF has a steep learning curve, don't get dis-heartened it's brilliant, but it has so many nooks and corners that it'll take a while to get comfortable. For a start there's a really good blogging community at WPFDisciples all of these are worth reading. Codeplex has some good libaries for 3D, physics engines etc and reverse engineering others code is a good way to learn.
A couple of good books are Windows Presentation Foundation Unleashed and Petzold's Applications = code + markup is one of the few books/places that doesn't preach that everything has to be done in Xaml
An area that takes some getting used to is binding, lots of stuff out there but it can be complex, and it's a impossible to debug until you have the magic knowledge. Binding in WPF isn't just about data, it's about linking all UI elements and behaviours together - it's really important.
Finally you have a choice between Silverlight and WPF, they're not the same. Although Silverlight is a good sub set of WPF, there are certain things you just can't do.
Finally Finally if you have a graphic design, artist background try using Blend, not VS it's a much better tool for those who are visually aware.
Obviously getting to grips with XAML and how to work with it as a concept is important if you haven't already. An overview of it (using WPF as the example) can be found at MSDN here along with the System.Windows.Markup namespace which has the classes you would use for working with it.

Categories