The TabControl derives from Selector to provide you an ItemsControl to host elements inside it. You can host only TabItem controls, which are actually HeaderedContentControl to provide a Header to each of the items.
The Header property is of type object, which will allow you to put any content inside it, be it a plain text or a different UI element.
In the preceding example, the first two TabItem controls contain plain text as headers, whereas the third TabItem contains many different UIElement to give its header a customized look. When you switch from one tab to another, you will see its associated content, which you can programmatically access through its Content property.