Designing GitHub for Windows
github.com
github.com
XAML has just been total let down since I've had to learn it for an ongoing Silverlight project.
edit: Some people have asked why I didn't like XAML. My pragmatic concern has to do with the workflow and design of UI elements. You shouldn't need blend to edit validation styles efficiently. I know you don't need blend, but you can't just go in and add a single line to change the color of an invalid toolbox border--the alternative to blend is to (afaik) copy the entire style resource that the element uses from MSDN, dig into it to find the appropriate 10 lines of useless markup that surround one word property.
CSS is infinitely more simple than XAML style resources.
I'm also very partial to the pseudo separation of concerns where HTML is for semantics, and CSS is for style, and JS is for effects. Tying all of those things into one XML based language just doesn't make sense.
That said, the whole MS C# stack has really been great to work with outside of XAML and its default elements.
edit: Some people have asked why I didn't like XAML. My pragmatic concern has to do with the workflow and design of UI elements. You shouldn't need blend to edit validation styles efficiently. I know you don't need blend, but you can't just go in and add a single line to change the color of a border--the alternative to blend is to (afaik) copy the entire style resource that the element uses from MSDN, dig into it to find the appropriate 10 lines of useless markup that surround one word property.
CSS is infinitely more simple than XAML style resources.
I'm also very partial to the pseudo separation of concerns where HTML is for semantics, and CSS is for style, and JS is for effects. Tying all of those things into one XML based language just doesn't make sense.
That said, the whole MS C# stack has really been great to work with outside of XAML and its default elements.
Everyone else, including myself, see it for what it is, one of the best ways to build up, iterate/change, and maintain a UI.
Nothing else even comes close.
edit: I write XAML mostly manually, not via a designer. I also don't subscribe to any particular rule-set about using or not-using code-behind, particular ways of databinding, etc.
Clues come from experience. And without experience, just starting out on a subject, makes you clueless about it.
A more constructive phrasing might have been:
The majority of people that I've heard criticize XAML are people who are just starting out with it and don't fully understand what it has to offer
It quickly progresses past hand editing on any project of any significant complexity. (Read: a real app) So Blend is required, especially if you're doing animations. VS is only slightly better than notepad for XAML.
XAML parsing is consistently broken in Blend and VS, so bad markup breaks the entire file without any meaningful error message. On a related note, it is very difficult to make "Blendable" XAML files. Wiring up data-binding kills blendability. You end up opening a lot of "blank" files in the designer.
MVVM is a pattern to avoid having to deal with XAML.
XAML is more of a human-readable file format than a presentation markup language. You have a lot of information about the app/state mixed in with the UI markup. You need to have a solid understanding of the C# underneath to use XAML properly.
Designers should NEVER be allowed to produce their own XAML, especially in Blend. It's worse than Frontpage. The cake is a lie. Designers still live in Photoshop and Illustrator. Programmers are actually the main users of Blend. The root problem is that you can't produce usable XAML without also knowing C# and the .NET Framework. In other words, you have to be a programmer to generate XAML in Blend. Fail.
That's like complaining about gravity or friction or taxes. Give me an example of a software tool that non-programmers can use to generate working software and I'll eat my hat.
XAML isn't working software. It's markup. UI.
For an example, I've seen designers generate great HTML+CSS (and then leave the data queries and ajax post to coders who don't have the same design sense).
Designers use tools, and they edit the resulting textual markup by hand. Because understanding that markup and having an aesthetic sense about when it "looks good", has low repetition etc is part of their skillset.
If C# had hygienic macros, I think the syntax of C# could have been extended for WPF specific needs, without having to resort to an XML based solution.
With a few extension methods, C# can come close and sometimes exceed XAML in its concision. I've been collecting these in a FluentWpf (https://github.com/dharmatech/FluentWpf) project on GitHub.
An example: http://stackoverflow.com/questions/1347219/are-there-any-flu...
Aside from that the true power of xaml is it allows you to change anything. For example, A radio button group, checkbox list, drop down, expandable list or searchable list could all derive from the same basic component AND same set of data. In html that would be like saying this (warning, lots of fake code below)
<div class="dropDown" data="['frank','sam','larry']"/>
<div class="expanderBar" data="['frank','sam','larry']"/>
<div class="radioButton" data="['frank','sam','larry']"/>
<class id="radioButton"> <div style="border:1px solid black"> <loop value="data" var="item"> <input type="radio" name="user" checked="condition">${item} </loop> </div> </class>
...and so on
That is COOOL and it has been around since XAML was created. We've tried to get to the same place with jquery templates but they have always been hackish approaches to templating/styling
This is spot on. The point of a declarative markup language is to make hand editing easy, but XAML fails hard on the simplest of tweaks.
The most confusing thing is what you see when you select a repository. It shows you the commit details and diffs of the latest commit. That makes you feel like something is wrong or pending so you need to respond to it. The latest commit and its diffs are really not the main point of interest in that situation.
I would much prefer to see a tree view of the current files in the repo (and maybe the README), just like on GitHub. That would be the most natural way of browsing the files, opening them by clicking, and seeing what has been modified.
That would make you feel that you are in control and understand what's going on right from the beginning. Even if you're a newbie or non-tech guy.
HTML is for documents.