На нашей работе у нас есть продолжение противоречия, где некоторые люди хотят создать пользовательские элементы управления, которые комбинируют часто используемые средства управления как маркировка и текстовое поле, или маркировка и управление изображением. Таким образом, что-то вроде этого:
<StackPanel Orientation="Horizontal">
<Image Source="/Someimage/Somewhere.gif"/>
<Label>Some text, hyperlink, or other content</Label>
</StackPanel>
и используйте его как это
<ImageLabel
HeaderImageSource="/Someimage/Somewhere.gif"
>
Some text, hyperlink, or other content
</ImageLabel>
Вопрос состоит в том, если они обеспечивают достаточно инкапсуляции и абстракции для заслуживания управления отдельного пользователя?
Да, на мой взгляд, этого достаточно для создания отдельного пользовательского элемента управления - если они формируют логический компонент в вашем контексте. В проекте, над которым я работаю, мы действительно создаем пользовательские элементы управления, если у нас есть сгруппированные компоненты, которые мы хотим использовать повторно. Основным преимуществом является то, что вы получаете контроль над структурой и стилем компонента. Рассмотрим случай, когда вы хотите где-то внести изменения. Например, добавить рамку вокруг изображения или добавить какой-нибудь стиль в свой лейбл. Вы не захотите просматривать код, чтобы найти все совпадения повторяющейся группы компонентов. Вместо этого - вы бы хотели обновить только это место - а именно в пользовательском компоненте, который вы отделили.
Еще одно преимущество - если вы хотите привязать компоненты к одному и тому же объекту. Тогда вы можете привязать ваш ImageLabel к объекту вместо этого, и ваши компоненты могут быть привязаны непосредственно к свойствам внутри этого объекта красивым и чистым способом. Замечание: Я предполагаю, что вы на самом деле хотите повторно использовать этот компонент и хотите, чтобы он был структурирован и стилизован одинаковым образом во всем вашем приложении. Я бы никогда не создал такого простого пользовательского элемента управления для использования только один раз.
Кажется немного переборщил с созданием UserControl для трех элементов управления; я бы подумал, сэкономит ли это мне время и усилия, а не инкапсуляция/абстракция
.