XAML is the definition language most often used to define a WPF based user interface. Using XAML you can define sleek, modern and highly functional applications.
Most people talk about XAML and WPF interchangeably, but I feel I need to kick off our discussion with an important concept:
XAML != WPF
XAML and WPF are, in fact two separate things even if they are closely linked. XAML is a definition language, similar to HTML. Well, more like HTML, WINForms and XML collided together in a Mythbusters type of explosion, and XAML is the result.
XAML requires a framework to execute. Often that framework is WPF, but it’s not necessarily so. Internet Explorer can interpet and display a XAML page, as can tools like XamlPad. Take this simple example:
<Page xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” xmlns:sys=”clr-namespace:System;assembly=mscorlib” xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” >
<Grid>
<Label>Welcome to ArcaneCode!</Label>
</Grid>
</Page>
Here you can see XamlPad displays the label in the upper part of the window:
No WPF, no compilation, no other magic, just the XAML Parser at work. You could save the code snippet above, and open it in Internet Explorer if you so wished.
Now let’s create another user interface, this time we’ll use WPF and NO XAML! Start a new project in Visual Studio, and pick BlankProject (note, do NOT pick Windows Project (WPF). We’ll use it later, but not today.)
Add references to three assemblies in the .Net tab: PresentationCore, PresentationFramework, and WindowsBase.
Now add a class, I named mine wpftest. Here’s my code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
namespace wpf001
{
class wpftest : Application
{
[STAThread]
static void Main()
{
wpftest mytest = new wpftest();
mytest.Startup += MyTestStartup;
mytest.Run();
}
static void MyTestStartup(object sender, StartupEventArgs e)
{
arcaneWindow aw = new arcaneWindow();
aw.Show();
}
}
}
Note the use of an arcaneWindow class, let’s create that now:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
namespace wpf001
{
class arcaneWindow : Window
{
Label lblWelcome = new Label();
public arcaneWindow()
{
this.Title = “Greetings!”;
this.Width = 320;
this.Height = 120;
lblWelcome.Content = “Welcome to ArcaneCode!”;
this.AddChild(lblWelcome);
}
}
}
Note the following things:
First, I’ve added two “using” lines, System.Windows and System.Windows.Controls. Next, I needed to create a new window (arcaneWindow) and inherit from the base Window type. Finally, I created a WPF label control, and added it to our window via AddChild.
Once you get all of it in, run the program and you should see:
There you go, you’ve just created a WPF user interface without a single line of XAML.
My point of this kick off was to demonstrate the difference between WPF and XAML. Most times, you will probably be using WPF and XAML in conjunction, but you don’t HAVE to.
In the coming days, we’ll delve a little deeper, and I’ll explain more of what some of the code you’ve seen today means.