[WPF] Inheritance: UserControl vs ContentControl
От: skodnik  
Дата: 10.01.11 12:23
Оценка:
Создание новых контролов под 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 — не первый раз вижу.
Re: [WPF] Inheritance: UserControl vs ContentControl
От: _FRED_ Черногория
Дата: 10.01.11 12:41
Оценка:
Здравствуйте, skodnik, Вы писали:

S>в чем профит таких извращений?


Ответ:
S>UserControl … поддерживает добавление елементов в дизайнтайм, etc.

Именно для этого UserControl-ы и предназначены. Лучше всего открыть исходник и посмотреть отличие UserControl от его родителя
Help will always be given at Hogwarts to those who ask for it.
Re: [WPF] Inheritance: UserControl vs ContentControl
От: DmitryMS  
Дата: 10.01.11 12:43
Оценка:
профит в том, что сложные контролы выигрывают от декомпозиции. Простота разработки + возможность переопределения стиля для частей контрола как основной механизм его кастомизации (можно делать всяких мутантов, например, 3D scrollbar). При работе с частями из родительского контекста надо всегда предполагать, что часть (this.GettemplatedChild("PART_Bollox")) может быть null, если обращение к ней произошло до ApplyTemplates.
Re: [WPF] Inheritance: UserControl vs ContentControl
От: MxMsk Португалия  
Дата: 10.01.11 18:33
Оценка:
Здравствуйте, skodnik, Вы писали:

S>Создание новых контролов под WPF/Silverlight в книгах расписано на примере создания класса, который наследуется от UserControl. Студия в данном случае поддерживает и XAML и codebehind.

S>Но я часто вижу другой подход: наследование от ContentControl, довешивание на него применяя стили различные панели с названием типа: x:Name="PART_xxx" затем в конструкторе или в другом месте поиск этих панелей
Здесь есть тема
Автор:
Дата: 07.05.10
, в которой рассматривался подобный вопрос.

S>в чем профит таких извращений? UserControl прямой наследник ContentControl, поддерживает добавление елементов в дизайнтайм, etc.

Прежде чем называть это извращением, стоит разобраться для чего это придумали.
Re: [WPF] Inheritance: UserControl vs ContentControl
От: Vladek Россия Github
Дата: 11.01.11 00:53
Оценка:
Здравствуйте, skodnik, Вы писали:

S>в чем профит таких извращений? UserControl прямой наследник ContentControl, поддерживает добавление елементов в дизайнтайм, etc.


UserControl — одноразовые (может быть и нет, смотря как писать) составные контролы для конкретного приложения, ContentControl — универсальные контролы, поддерживающие все фичи WPF (может быть и нет, смотря как писать).

S>Да, и кто придумал именовать PART_xxx — не первый раз вижу.


Microsoft.

Почему бы не посмотреть в Рефлекторе, как написан класс Button или TextBox?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.