Создание новых контролов под 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 — не первый раз вижу.
Здравствуйте, skodnik, Вы писали:
S>в чем профит таких извращений?
Ответ:
S>UserControl … поддерживает добавление елементов в дизайнтайм, etc.
Именно для этого UserControl-ы и предназначены. Лучше всего открыть исходник и посмотреть отличие UserControl от его родителя
профит в том, что сложные контролы выигрывают от декомпозиции. Простота разработки + возможность переопределения стиля для частей контрола как основной механизм его кастомизации (можно делать всяких мутантов,
например, 3D scrollbar). При работе с частями из родительского контекста надо всегда предполагать, что часть (this.GettemplatedChild("PART_Bollox")) может быть null, если обращение к ней произошло до ApplyTemplates.
Здравствуйте, skodnik, Вы писали:
S>Создание новых контролов под WPF/Silverlight в книгах расписано на примере создания класса, который наследуется от UserControl. Студия в данном случае поддерживает и XAML и codebehind.
S>Но я часто вижу другой подход: наследование от ContentControl, довешивание на него применяя стили различные панели с названием типа: x:Name="PART_xxx" затем в конструкторе или в другом месте поиск этих панелей
Здесь есть
темаАвтор:
Дата: 07.05.10
, в которой рассматривался подобный вопрос.
S>в чем профит таких извращений? UserControl прямой наследник ContentControl, поддерживает добавление елементов в дизайнтайм, etc.
Прежде чем называть это извращением, стоит разобраться для чего это придумали.