Sehr oft wird in Foren bzw. per Email gefragt, wo denn genau der Unterschied zwischen einem DataTemplate und einem ControlTemplate liegt. Dies ist relativ einfach erklärt.
DataTemplate
Ein DataTemplate wird verwendet, um das Aussehen bzw. die Zusammensetzung eines Daten-Items zu beschreiben. D.h. darüber wird der Visual Tree eines Daten-Items definiert. Relevant ist dies bei Items für eine ListBox, ListView usw. Dabei kann es sich um eine Ableitung eines ListBoxItems (je nach Steuerelement) oder um eine CLR-Objekt handeln.
ControlTemplate
Ein ControlTemplate hingegen beschreibt den Visual Tree und damit den Aufbau eines Steuerelements.
Fazit
Sollen also Items einer "Auflistung" beschrieben werden, dann ist die Verwendung eines DataTemplates zielführend. Andernfalls ist ein ControlTemplate zu verwenden.