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