Il n'y a pas d'exigence pour un TargetType, mais si vous n'en spécifiez pas, il se comportera comme si vous spécifiez un TargetType of Control. Le principal avantage de la spécification d'un type est l'accès à toutes les propriétés de dépendance de ce type dans des éléments tels que TemplateBindings et Triggers sans avoir à qualifier la propriété avec le type de propriétaire. Sans TargetType, vous pouvez également perdre des liaisons implicites, comme ContentPresenter à la propriété ContentControl.Content. Une fois que vous spécifiez un TargetType, ce modèle ne peut être appliqué qu'aux contrôles de ce type ou dérivés de ce type. Pour partager entre différents types, spécifiez simplement une classe de base commune - ContentControl dans ce cas.
Les modèles simples suivants donnera le même résultat de base, mais la première est préférable et plus commun:
<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>
Sans type toutes les propriétés de contenu doivent être câblés manuellement:
<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>
Merci! J'ai passé les deux dernières semaines à créer ce grand diagramme de propriétés de dépendance, ce qui est logique. Je suppose que je coulda essayé cela ... :) – dex3703
Et cela expliquerait les erreurs étranges que j'ai eues (à propos de ne pas trouver des choses dérivées de Control) et pourquoi le contenu ne se montrerait pas. – dex3703