Здесь необходимо рассмотреть три случая: UserControl, ControlTemplate и custom Control. (Я предполагаю, что DataTemplate не нуждается в объяснении)
A пользовательский элемент управления - это то, что вы предоставляете при создании базовой функциональности нового компонента пользовательского интерфейса. Для этого есть различные плюсы и минусы, но, например, если вы хотите настраивать поведение при выборе элемента ItemsControl, лучше всего это сделать, создав подклассификатор Selector или MultiSelector (это делает wpftoolkit DataGrid). Кроме того, если вам нужен объект, который будет содержать новый DependencyProperty, вы в большинстве случаев будете наследовать от Control.
Принцип wpf, содержащийся здесь, - это «безликая» парадигма элемента управления, или «обязательно ожидайте, что кто-то будет шаблонизировать ваш элемент управления, или, по крайней мере, заставьте его вести себя хорошо в вашем собственном шаблонном сценарии». Пользовательские элементы управления обычно создаются с учетом возможности многократного использования, часто как части библиотеки dll.
A ControlTemplate по сути является описанием замещающего визуального дерева и может быть задан либо явно в FrameworkElements, либо как часть стиля. Это вариант, к которому вы должны стремиться, когда ваша цель состоит в том, чтобы подать заявку и покончить с этим. Вы можете сделать практически все с помощью ControlTemplate визуально, если вы в состоянии правильно настроить привязки и триггеры (и, возможно, содержащий сам стиль). Все это может быть объявлено как ресурс для повторного использования, чтобы дать вашему приложению общую «тему».
A UserControl - это автономный составной элемент управления с частями, редактируемыми по отдельности в конструкторе, и его лучше всего использовать, если вам необходимо просматривать свои компоненты и управлять ими в конструкторе. С другой стороны, ControlTemplate не будет предоставлять свои компоненты для манипуляции в конструкторе (хотя он будет видимым). Обычно вы создаете UserControl для страницы сведений о клиенте, браузер отображения продукта или любой другой случай, когда вы не хотите создавать полноценный элемент управления, но хотите получить подробный вид с полной поддержкой дизайнера.
Особый случай здесь, если вы используете шаблон MVVM . Многие великие реализации MVVM используют UserControls в качестве представлений, а ControlTemplates и Styles - в качестве ресурсов, используемых этими представлениями. Практика MVVM также сводит к минимуму необходимость в настраиваемом элементе управления и имеет много других преимуществ.
(Для получения дополнительной информации о MVVM, среди многих других, Google для фантастических статей Джоша Смита, Саши Барбера и Карла Шиффлетта)