|
Thanks for this - looks like it might be a good primer. Just have to find time to look at it!
|
|
|
|
|
It definitely takes some getting used to. Pretty steep learning curve.
|
|
|
|
|
I also started late, thinking the same things you have above.
But, once you get used to how it all works, and realize the power behind doing it, things become a lot easier and your UI's a lot cooler
|
|
|
|
|
I recommend Pro WPF 4.5 in C#[^] by Matthew MacDonald. I used an earlier edition to learn WPF, and it helped a lot.
Software Zen: delete this;
|
|
|
|
|
IMO - Don't start with how it should look - start with what it should do and let that drive how it should look. (It is still hard work but a bit less so)
|
|
|
|
|
Sorry I had to laugh at this reply! Unfortunately, the project I'm working on is used to produce a user-configurable graphic for use elsewhere. It doesn't "do" anything, and is in fact all about how it should look!
|
|
|
|
|
I do LOB in Silverloght (WPFs little brother for the web) and have to now look at MVC with all it's attendant tools (CSS, javascript, knockout, bootstrap, kendo etc). Makes WPF seem simple.
Mind you I consider graphics development the most difficult and would not even attempt what you are learning on, give me business data any day!
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
Agreed. WPF is a lot simpler when compared to doing something equivalent for the web. There are too many frameworks and too many moving parts with web development, I find it a pain. Makes me appreciate what Microsoft has done to streamline desktop development.
|
|
|
|
|
WPF is pretty cool. I will agree that it has flaws, and the lack of 'dispose' methods on objects is certainly one of them. But, having videos and other UI elements all on the same canvas is a huge advantage in some applications.
Christian Graus
My new article series is all about SQL !!!
|
|
|
|
|
Kyudos wrote: I'm waiting to see some advantage...
I'm waiting for it to go away.
Marc
|
|
|
|
|
The results available with WPF can be great.
The way to achieve those results is a pain in the backside.
When someone develops a GUI tool to effectively edit XAML it will be a vast improvement.
Personally I don't think that is now ever going to happen and Xaml will eventually die.
MVVM # - I did it My Way
___________________________________________
Man, you're a god. - walterhevedeich 26/05/2011
.\\axxx
(That's an 'M')
|
|
|
|
|
Agreed - the ridiculous verbosity of XAML makes if very unwieldy.
|
|
|
|
|
What are you missing in the XAML editor? I prefer to write XAML instead of using the designer and I think it is faster than doing the same with WinForms in the WinForms designer.
I can't see the "ridiculous verbosity of XAML". You write the properties which you would set in the property window for WinForms.
If you have a look at the generated WinForms code, that is ridiculous verbosity.
|
|
|
|
|
Obviously writing Xaml is faster than writing Winforms purely in code - but thee designer for Winforms works and works reasonably well.
The designer for Xaml is slow, buggy, crashes frequently, caches some stuff that require a restart of VS to fix, doesn't handle some things at all - so you need to resort to editing Xaml.
Now for a simple form with a few controls, that's all good. For a complex control with many many panels, grids, lists etc. changing the layout is a nightmare - just negotiating the Xaml can be a nightmare because VS2010 takes so damn long to parse the Xaml (even when not displaying the view) that one loses the will to live waiting for it!
Christian Wulff wrote: ridiculous verbosity of XAML
It wasn't me that said it - but I can see what people mean. it is verbose.
Sure you only set the same properties you would by using the forms designer and setting properties - but again the designer lets you down by making it necessary to hand-write much of it rather than using a good tool to save you mucking up the level of curly braces etc.
Christian Wulff wrote: If you have a look at the generated WinForms code, that is ridiculous verbosity.
Absolutely. But, then, you don't need to because the designer works.
MVVM # - I did it My Way
___________________________________________
Man, you're a god. - walterhevedeich 26/05/2011
.\\axxx
(That's an 'M')
|
|
|
|
|
_Maxxx_ wrote: For a complex control with many many panels, grids, lists etc. changing the layout is a nightmare - just negotiating the Xaml can be a nightmare because VS2010 takes so damn long to parse the Xaml (even when not displaying the view) that one loses the will to live waiting for it!
My experience is that with MVVM, I don't have one complex control with many many panels, grids etc. because these are divided into some sub-controls.
I choose to edit the XAML directly because for me it is easier that way and not because the designer is buggy. Same like I write HTML instead of using an HTML editor.
But most of my WPF experience comes from VS 2012 and VS 2013, which are much faster and more responsive than VS 2010.
I didn't want to start a religious war, just sharing my opinion that once I learned MVVM, I prefer WPF and XAML to WinForms and think it is easier
Especially because I don't write much code-behind and don't need to subscribe to many control Events.
|
|
|
|
|
Started reading this reply and I was thinking it sounds like this guy is still using 2010 or older. The new versions on studio have gotten much better at rendering xaml in the designer without crashing hanging etc.
Between WinRT/Silverlight/WPF I rarely use or look at the designer, other than maybe once I am done to check my work. The designer generates horrible xaml anyway.
|
|
|
|
|
Die and give way to what?
|
|
|
|
|
I'm not sure what you mean with bringing CSS horrors to application development?
I love xaml / C# combo.
It's indeed a steap learning curve though. Once you understand the magic, I feel like it's super easy (and fast) to get stuff going on screen. MVVM is a must, though.
|
|
|
|
|
I have been working with WPF for something like 7 years, and I still go through times when I wonder if it is insane, or insanely beautiful.
I usually conclude that it is a bit of both.
Often it takes a lot of work and verbosity and debugging to hook something up in XAML and have clean separation when it could be done with a bit of C#, but doing things declaratively is a bit of a game. It can be fun to learn, but sometimes it just isn't worth it to achieve the separation between code and layout. It is an addictive game, though, that pulls you in deeper and deeper.
At some point along the way it clicked, and I started breathing Styles, triggers, attached properties, DataTemplates, ControlTemplates, Bindings, RelativeSources, CollectionViewSources, StaticResources, DynamicResources, TemplateBindings, BooleanToVisibilityConverters, custom IValueConverters, DoubleAnimations, LinearGradientBrushes, Grid.ColumnDefitions, TransformGroups, AffectsRender, Storyboards, oh my!
"I don't often" enjoy writing XML, but when I do, it's XAML. I never used Blend, doing most by hand in Visual Studio, with its Intellisense that reads your mind, letting you avoid writing the bulk of the actual XAML. (I'm stuck with VS 2012 when editing XAML, since for some reason 2013's XAML editor crashes on my stuff by running out of virtual memory and I'm not alone.)
For newbies, I definitely recommend learning via the top MVVM frameworks and/or books, and keeping references like http://wpftutorial.net/[^] handy, as WPF has a uniquely obtuse learning curve. I like to learn things by getting my hands dirty and diving in, but for this, take the time to learn some of the theory from someone who knows how to present the concepts in an easy to manage order.
Also when you delve into bindings and collections, check out Bea Stollnitz's blog[^]http://www.zagstudio.com/blog[^]. She is some kind of superhuman that invented and can explain the bindings.
Also, browse WPF articles here on codeproject, so you can see all the cool things that can be done. When WPF is my favorite thing, CodeProject becomes my favorite site. (And if I get stuck, stackoverflow is my go to.)
I also used to avoid creating dozens of lines of boilerplate crap to do something simple. WPF made me get over it, eventually. Whether it's a new style that seems like way too much text to set a property, or a custom IValueConverter class to do some trivial conversion, or some utility class that traverses the visual or logical tree, get over it. Embrace the verbosity. (And there are some cool free 3rd party expression libraries that ease the pain by letting you inject a bit of code into XAML to avoid converters.)
Get Dr WPF's Visual Studio snippets[^] for writing Dependency Properties. It is insane to have 30 lines of code to add a WPF property to a class no matter how you slice it, but you might as well at least not type it in each time.
...after all I have learned, I still feel I have a lot left to master. It makes me both scared and excited -- and not sure if I have Stockholm syndrome or not.
I think Microsoft has been good at creating brand new things that are brilliant, just not totally brilliantly. And not with polish and unlimited foresight (which is an order of magnitude harder.) I'm looking forward to the next WPF, if there is one, whatever it ends up being. Qt has QML which is JSON-styled, which I generally prefer to XAML/XML. HTML5+javascript+CSS+jquery is full of possibility and ubiquity, but it also seems to be a nightmare, in its stylistic feel, when coming from the nice world of strongly typed C# desktop apps.
If I had unlimited time, I would love to create or help with an open-source (MIT/BSD/MPL so it is embeddable) cross platform C# successor to WPF (that somehow also worked on the web, such as via Mono/Unity3D) with all of the great declarative, data binding, and composition features so we could all live in a GUI paradise.
|
|
|
|
|
It all sounds very clever, but is it any good? What are the advantages over 'the old ways'? Is it a bit like the myth of code reuse?
|
|
|
|
|
Great tips! Should be a Code Project article. Let me know when you post it. :
|
|
|
|
|
I am in no position to answer your question, but when WPF was new I looked into it. It looked great and for a time i got very excited about it, but I never had the time to study it and in the end I decided that it wouldn't let me do anything I wanted to do that I couldn't do already. I'm sure I am wrong, there must be advantages. As for 'impenetrability', well that doesn't surprise me. I always find MS logic somewhat odd, though there can be no doubt as to the usefulness of their products in some situations.
|
|
|
|
|
Technically assembler can do everything you need as well. Are you still using that?
The power of xaml and therefore wpf, is that it is implemented in an incredibly consistent and logical fashion. Meaning that you can often predict where to do or find things in the xaml code even if you don't know what it is yet. I primarily contrast that to html which is the ultimate design by committee end product.
There is a learning curve both for xaml and mvvm, but once over that curve you will be amazed at just how productive you can be.
|
|
|
|
|
I am still using assembly language as a matter of fact, though more for fun than for actual applications, though it can be useful. I'm sure that WPF offers rewards, but I have too much on my plate at the moment to take up WPF. It is not high on my list of priorities. Isn't that the problem? Too many technologies to choose from?
|
|
|
|
|
lol cool! I haven't used assembler since college days.
The analogy I was trying to draw was not that nobody uses assembler; rather that assembler can do everything, so why bother programming with anything else? Its the same logic you used to invalidate wpf.
(To your very valid concerns/points on time)
I guess when I am looking at a technology I prioritize gains in productivity and maintainability ahead of technical capabilities. I suppose largely because most platforms/techs these days have very similar technical capabilities... Think java/web/winform/wpf/Silverlight/winrt/etc. when you consider what is technically possible there is not *that* big a difference.
If time is that critical keep in mind you do not have to go all in right away. It is absolutely possible to ease into wpf using the same coding workflow you would do in winforms, (drag and drop designer, double click to add handlers, etc.). Its just that MVVM pays huge dividends via time saved during refactoring down the road, its makes it hard to roll a UI in xaml and not just go ahead with MVVM as well.
|
|
|
|
|