Il y a trois cas à considérer ici: UserControl, ControlTemplate, et la coutume de Contrôle. (Je devine un DataTemplate a besoin d'aucune explication)
Un Contrôle personnalisé est quelque chose que vous fournissez lors de la création de la base de la fonctionnalité d'un nouveau composant de l'INTERFACE utilisateur. Il ya divers avantages et inconvénients, mais par exemple, si vous souhaitez sélection personnalisée comportement d'un ItemsControl, vous pourriez mieux faire par la sous-classement Sélecteur ou MultiSelector (le wpftoolkit DataGrid n'est présent). Aussi, si vous voulez un objet contenant une nouvelle DependencyProperty, vous aurez dans la plupart des cas dériver de Contrôle.
Wpf principe énoncé ici est le "lookless" paradigme de contrôle, ou "assurez-vous de demander à quelqu'un de template de votre Contrôle, ou au moins faire en sorte qu'il se comporte correctement dans votre propre modèle de scénario". Contrôles personnalisés sont généralement créés avec la possibilité de réutilisation à l'esprit, souvent en tant que parties de cadre dll.
Un ControlTemplate est essentiellement une description d'un remplacement de l'arbre visuel, et peut être définie de façon explicite sur FrameworkElements, ou comme une partie d'un Style. C'est l'option que vous devriez viser à quand votre objectif est principalement de faire une demande et être fait avec elle. Vous pouvez faire presque n'importe quoi avec un ControlTemplate visuellement, si vous êtes en mesure d'obtenir les liaisons et les déclencheurs (et la possible contenant le Style lui-même) à droite. Tout cela peut être déclarée comme une ressource d'un réutilisés, pour donner à votre application, une commune "thème".
Un UserControl est lui-même un contrôle composite, avec les pièces individuellement modifiable dans le concepteur, et est mieux utilisé si vous avez besoin de voir vos composants et de les gérer dans le concepteur. Un ControlTemplate, d'autre part, ne sera pas exposer ses composants pour la manipulation dans le concepteur (bien qu'il sera visible). Vous avez l'habitude de créer un UserControl pour une page de détails du Client, ou d'un Produit d'affichage du navigateur, ou en tout cas où vous ne souhaitez pas créer un Contrôle complet, mais vous voulez la vue détaillée avec la pleine prise en charge du concepteur.
Un cas particulier ici est que si vous utilisez le MVVM modèle. De nombreux grands MVVM implémentations utilisent UserControls que des Vues, et ControlTemplates et les Styles que les ressources utilisées par ces points de vue. MVVM pratique permet également de réduire le besoin pour un Contrôle personnalisé, et a beaucoup d'autres avantages.
(Pour plus d'informations sur MVVM, parmi beaucoup d'autres, Google pour Josh Smith, Sacha salon de coiffure et Karl Shifflett de fantastiques articles)