I think XAML (Extensible Application Markup Language) is a great language; its syntax is clear and simple, it might be used for many different problem domains, but it’s primary role is to construct WPF use interfaces. Although you can define your UX interfaces by hand (using Microsoft Visual Studio, for example), especially if you are graphic designer, you will use Microsoft Expression Blend. Anyway, both tools works great, and they can be replenishment to each other.
At first glance, you may think of XAML as a way to define your graphical user interface; a container to place your visual elements, such as panels, buttons, labels, and grids. All elements represents classes and they are instantiated when the page/window content is firstly rendered. Also, there is marvelous support of data binding. Together with using of styles, control templates, data templates, selector, type converters, user controls, you can build fully-fledged flexible and incredibly designed applications.
XAML appears not only as a building block of Windows Forms-style applications. It also is the part of other technologies, which shows the great importance it plays in modern applications:
- WPF XAML – it reveals the real power of XAML, because it contains all the functionality exposed for rendering WPF content (vector graphics, controls, documents, animations, etc.),
- Silverlight XAML – a subset of WPF XAML ; currently does not support tunneling of routed events, element to element binding, all kinds of layout rendering – used for designing Silverlight applications (cross-platform Microsoft’s pandan to Flash),
- XPS XAML – used for rendering XPS-formatted documents (XPS is Microsoft’s answer to PDF documents),
- WF XAML – used for designing Workflow Foundation (WF) workflows (.xoml).
There is one more type of XAML which is not here in the list – an intermediate product of XAML compilation called BAML. Binary Application Markup Language is merely binary-formatted XAML (as analogue as obj files or IL code to CLR). Each time the XAML is compiled, it becomes a BAML file, which is smaller and optimized.