The biggest benefit of XAML is that it allows you to describe your UI in an declarative way. That is, you don't so much say "create a box, now resize it", you say "create a box and btw, it's this size"
The second place where XAML shines is that it really takes advantage of bindings. For instance:
<Button IsEnabled="{Binding IsBusy}">
In your view model you can go about your business and set IsBusy to true or false, and as it changes, the Button's enabled state automatically switches back and forth.
So as a more complex example:
<ListBox ItemsSource={Binding Options}>
<ListBox.ItemsTemplate>
<CheckBox Checked="{Binding IsChecked}" Contents="{Binding Name}"/>
</ListBox.ItemsTemplate>
</ListBox>
In this example we're binding to a list (Options) and creating an item in a list box for every item. The cool thing here is that as we add items to the list, or remove them the UI is automatically synced to the state of our list. As we click the checkbox on each item, the underlying objects are automatically updated to match the UI. With powerful tools like this I've hacked out UIs in a fraction of the time it would take me to wire up all the events in a WinForms app.
In general this all means that you can write your UI in a declarative format and this is a massive productivity gain. Although, I must mention that this does at a cost. You will probably get more performance out of a WinForms app as the code will be less generalized. But unless you're doing something like showing 40,000 rows in a data grid, you probably won't notice a big slowdown using XAML.
It should also be mentioned that other UI libs accomplish this same goal without XML. For instance, QT uses Json (http://labs.qt.nokia.com/2009/05/13/qt-declarative-ui/)