Пользовательский контроль vs
Я читал некоторые объяснения различий между пользовательскими и пользовательскими элементами управления, например:
http://www.wpftutorial.net/CustomVsUserControl.html
Я хочу создать, например, простой состав datagrid с двумя comboboxes, которые отвечают за изменение значений из элементов datagrid. Я хочу создать конкретный элемент управления для этого, потому что я буду использовать его много раз. Я хотел бы реализовать логику позади, а затем в вызове xaml мне нужно только указать itemsSource.
В этом примере я должен создать пользовательский или пользовательский элемент управления? Поскольку у меня будут свойства и логика, должен ли я иметь viewmodel для этого элемента управления?
EDIT: знаете ли вы некоторые статьи с четким концептуальным разделением между этими двумя вариантами?
Ответы
Ответ 1
Выбор осуществляется не только между пользовательским элементом управления и пользовательским управлением, но и между пользовательским элементом управления, настраиваемым элементом управления, настраиваемым шаблоном управления, настройкой шаблона данных, шаблоном заголовка (для элементов управления на основе коллекции), прикрепленными свойствами.
См. Обзор управления авторами
Я следую порядку рассмотрения
-
Прикрепленные свойства. Если функциональность может быть достигнута, я использую прикрепленные свойства. Пример, числовое текстовое поле.
-
Шаблон управления. Когда требование может быть выполнено путем настройки шаблона управления, я использую это. Пример: круговой индикатор выполнения.
-
Пользовательский контроль. Если шаблон управления не может этого сделать, я использую настраиваемый элемент управления. При условии, что мне нужно настроить/расширить уже существующий элемент управления. Пример предоставления Сортировка, Фильтрация на основе строки заголовка в GridView (GridView присутствует в приложениях метро, используемых только для иллюстрации примера)
-
Пользовательский контроль: наименее предпочтительный. Только когда состав необходим, и я не могу сделать это с помощью пользовательского контроля. Как в вашем примере, 2 Combobox и 1 datagrid. Элементы управления пользователя не обеспечивают бесшовную функцию без искажений, которая может использоваться с помощью пользовательского элемента управления или шаблона управления.
Ответ 2
У вас уже есть отличные ответы, которые объясняют различия, но также понимают, что пользовательские элементы управления и UserControls
имеют разные цели:
A UserControl
обычно инкапсулирует какое-то сложное поведение. Если у вас есть приложение, которое необходимо редактировать контактные данные во многих местах, например, вы можете создать настраиваемый элемент управления, который имеет метки и текстовые поля для всех данных, выложенных с помощью кнопки отправки, которая имеет соответствующий код и повторно использует этот элемент управления во всем приложении.
Пользовательский элемент управления - это элемент управления, который получен из одного из классов управления WPF
(E.G. Control
, ContentControl
и т.д.) и должен быть создан в коде.
Этот контроль обычно имеет единственную цельную цель (думаю, TextBox
, ComboBox
, Label
), а не действовать вместе как целое (хотя этого не должно быть).
UserControl
обычно легче для людей, незнакомых с WPF
, поскольку они могут быть визуально разработаны.
Мое предложение - начать с UserControl
. Вы всегда можете реорганизовать это в пользовательский элемент управления на более поздний срок, когда будете более знакомы с тем, как работает WPF
. Для создания вашего контроля в качестве настраиваемого элемента управления потребуется знание ControlTemplate
и Style
, так как вам нужно будет предоставить свой собственный, чтобы определить внешний вид вашего контроля.
Когда все сказано и сделано, пока управление ведет себя правильно, не имеет значения, какой подход вы используете.
См. эту статью для примера двух подходов к одной и той же проблеме. Автору сообщения нужен элемент управления, который может представлять модальное содержимое перед основным контентом. Автор сообщения фактически ответил на свой вопрос, выполнив его как UserControl
. Я добавил ответ на сообщение, которое создает элемент управления как настраиваемый элемент управления, но оба имеют тот же конечный эффект.
Ответ 3
Лучшее объяснение в MSDN. CustomControl - это, скорее, "виртуальное" имя, в WPF нет класса с именем "CustomControl", вместо этого он подразумевает создание нового класса, построенного поверх одного из классов элементов управления WPF, таких как Control
, ItemsControl
и даже более специфических элементов управления, таких как TextBox
или Button
,
Для вашего конкретного случая должно быть достаточно UserControl, а создание CustomControl - это то, чего легко избежать. Хотя это неплохо, многие люди, особенно новички в WPF, пришедшие из WinForms, склонны создавать подклассы больше, чем необходимо.
Ответ 4
-
Если у вас есть модель представления, и вы хотите создать представление для нее, используйте User-Control.
-
Если вам нужен элемент автономный, который не имеет конкретной модели представления,
вам, вероятно, нужен пользовательский контроль.
-
Если вы обнаружите, что функциональные возможности , которые вам нужны в целом, уже существуют в других элементах управления, вам необходимо переопределить существующий шаблон управления.
(то есть для кнопки с бриллиантовой формой - вам нужно переопределить шаблон управления кнопкой.)
-
Что касается прикрепленных свойств и приложенных действий, они полезны, когда у вас есть элемент управления, который вы хотите расширить с большим количеством свойств, или вы хотите, чтобы он отличался от поведения по умолчанию.
В представленном случае композиции, описанной ОП, ее можно достичь либо с помощью пользовательского управления, либо с помощью пользовательского элемента управления. Я бы предпочел настраиваемый элемент управления, поскольку не существует конкретной модели представления, "вход" - это свойство, связанное только с коллекцией элементов.
О, и я сожалею, что немного опоздал.
Ответ 5
Если это как-то ваш первый элемент управления зданием, я рекомендую UserControl, поскольку VS позволяет вам упростить дизайн интерфейса. Пользовательские элементы управления более мощные, но вы должны ОЧЕНЬ отделить свою логику управления от своего интерфейса, и для этого требуется немного больше подготовки.
Ответ 6
Вы можете легко визуально оформить CustomControl
. Создать новый UserControl
(или Window). Создайте его структуру xaml визуально в Designer. Скопируйте и вставьте тело полученного xaml в ControlTemplate
вашего нового CustomControl
(например, в общий файл темы).
Если я правильно помню, вы также можете визуально создавать шаблоны CustomControl напрямую, в Blend.
Конечно, вы также можете создать экземпляр CustomControl в окне и поместить представление конструктора окон в качестве новой панели над представлением элемента управления xaml в VisualStudio. Однако некоторые привязки xaml из шаблона стиля не отображаются в Designer как этот, пока я не перестрою.
[Imho GUI - это, в основном, визуальный материал, и его не нужно и не нужно создавать в коде. ]
Ответ 7
Чтобы создать пользовательский элемент управления, вам необходимо реализовать его как пользовательский элемент управления. Ваш собственный элемент управления пользователя называется пользовательским. Это довольно просто.
UserControl - это базовый класс для размещения вашего пользовательского контента:
<UserControl>
Your custom WPF content
</UserControl>
Я не совсем согласен с этой статьей. Однако в вашем случае вам нужен UserControl, который вы можете повторно использовать в своем пользовательском интерфейсе.
Ответ 8
Вы всегда можете положиться на понятные описания в стиле microsoft:
Пользовательский контроль (WPF) - пользовательский контроль Windows Presentation Foundation
Пользовательский контроль (WPF) - пользовательский контроль Windows Presentation Foundation