Подтвердить что ты не робот

Пользовательский контроль vs

Я читал некоторые объяснения различий между пользовательскими и пользовательскими элементами управления, например: http://www.wpftutorial.net/CustomVsUserControl.html

Я хочу создать, например, простой состав datagrid с двумя comboboxes, которые отвечают за изменение значений из элементов datagrid. Я хочу создать конкретный элемент управления для этого, потому что я буду использовать его много раз. Я хотел бы реализовать логику позади, а затем в вызове xaml мне нужно только указать itemsSource.

В этом примере я должен создать пользовательский или пользовательский элемент управления? Поскольку у меня будут свойства и логика, должен ли я иметь viewmodel для этого элемента управления?

EDIT: знаете ли вы некоторые статьи с четким концептуальным разделением между этими двумя вариантами?

4b9b3361

Ответ 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