Для TargetType не требуется, но если вы его не укажете, он будет вести себя так же, как если бы вы указали TargetType для Control. Основное преимущество, которое дает указание типа, - это доступ ко всем свойствам зависимостей этого типа в таких вещах, как TemplateBindings и Triggers без необходимости квалифицировать свойство с типом владельца. Без TargetType вы также можете потерять неявные привязки, например ContentPresenter, к свойству ContentControl.Content. После того, как вы укажете TargetType, этот шаблон может быть применен только к элементам управления этого типа или производным от этого типа. Для обмена между различными типами просто укажите общий базовый класс - в данном случае ContentControl.
Следующие простые шаблоны дадут тот же базовый результат, но первый предпочтительнее и более распространен:
<ControlTemplate x:Key="CommonContentTemplate" TargetType="{x:Type ContentControl}">
<Border x:Name="Bd"
SnapsToDevicePixels="true"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}"
CornerRadius="1">
<ContentPresenter x:Name="cpItemContent"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
Без типа все свойства контента необходимо связать вручную:
<ControlTemplate x:Key="CommonTemplate">
<Border x:Name="Bd"
SnapsToDevicePixels="true"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}"
CornerRadius="1">
<ContentPresenter x:Name="cpItemContent"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
Content="{TemplateBinding ContentControl.Content}"
ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}"
ContentTemplateSelector="{TemplateBinding ContentControl.ContentTemplateSelector}"
ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}"/>
</Border>
</ControlTemplate>