The developers of the ItemsControl class gave it a particular default behavior. They thought that any objects that extended the UIElement class would have their own UI container and so, should be displayed directly, rather than allowing them to be templated in the usual way.
There is a method named IsItemItsOwnContainer in the ItemsControl class, which is called by the WPF Framework, to determine whether an item in the Items collection is its own item container or not. Let's first take a look at the source code of this method:
public bool IsItemItsOwnContainer(object item)
{
return IsItemItsOwnContainerOverride(item);
}
Note that internally, this method just calls the IsItemItsOwnContainerOverride method, returning its value unchanged. Let's take a look at the source code of that method now:
protected virtual bool IsItemItsOwnContainerOverride(object item) { return (item is UIElement); }
Here, we see two things: The first is the default...