The previous post shows how TIM markup handles controls and touches on the basics of setting properties such as a controls path. This post shows a more complex example and introduces some more advanced features of TIM.
First of all, the concept of the ID. This will be familiar to anyone who knows HTML, and works in exactly the same way. Each control can have an ID, which is essentially a name which you can use to refer to the control (and to bind it to a field in your application, but more on that another time). TIM also supports inheritance, which is based upon IDs. Basically, if a control in your TIM markup is declared as inheriting from something else, it gains all the property settings specified for that something else. The 'something else' is referred to by its ID, therefore if you need to inherit from something then you need to give that something an ID. That probably wasn't very clear, but I can't think of a better way to explain it. Maybe a quick example:
<t:Button ID="btn1" Text="Button 1">
<FontSize>20</FontSize>
</t:Button><t:Button Inherit="btn1" Text="Button 2"/>
In this example, button 1 is declared with an ID of "btn1, Text of "Button 1" and a FontSize of 20. Button 2 inherits from button 1. Therefore, button 2 gets all of the property values from button 1, so its FontSize property also becomes 20, but its Text property doesn't become "Button 1" because it sets this itself to "Button 2". The ID isn't inherited as this would cause all kinds of trouble.
As you can imagine, defining a GUI purely in XML can easily lead to a very large file very quickly, particularly when we start to modify things such as gradients. For this reason, TIM supports an "Include" element. This does exactly what it suggests, it includes another file. This may not seem significant, but it means GUIs can be split into parts to be easier to manage, and when the Include element is combined with the Inherit attribute from above, a lot can be achieved. An obvious use for this is to seperate the GUI from its style. One more thing is needed for this, and that is to be able to define a properties which form a style without defining an object, so that the properties in the style markup file can be pulled into the GUI markup without any extra unwanted objects. This is possible due to the Ignore element, which in simplest terms causes the TIM loader to ignore the element other than for inheritance.
A good example of this is shown below, although it shows a current bug in the rendering of TabControls (the bottom border doesn't show when no padding is used):

I don't have the time to explain all of this here, but attached is the TIM markup used to create this GUI for your viewing pleasure.