Создание новых контролов под WPF/Silverlight в книгах расписано на примере создания класса, который наследуется от UserControl. Студия в данном случае поддерживает и XAML и codebehind.
Но я часто вижу другой подход: наследование от ContentControl, довешивание на него применяя стили различные панели с названием типа: x:Name="PART_xxx" затем в конструкторе или в другом месте поиск этих панелей
Panel xxxControls = this.GetTemplateChild("PART_xxx") as Panel;
if (xxxControls == null)
{
throw new NullReferenceException("Could not find templated PART: PART_xxx");
}
xxxControls.MouseLeftButtonDown += new MouseButtonEventHandler(OnTranslateControlsMouseLeftButtonDown);
в чем профит таких извращений? UserControl прямой наследник ContentControl, поддерживает добавление елементов в дизайнтайм, etc.
Да, и кто придумал именовать PART_xxx — не первый раз вижу.