В чем разница между библиотекой пользовательских элементов управления и библиотекой пользовательских элементов управления?

168

Я только начинаю работать над WPF и хотел бы создать элемент управления WPF многократного использования.

Когда я смотрю на варианты создания проектов в Visual Studio, я вижу «Библиотека управления пользователями WPF» и «Библиотека пользовательских элементов управления WPF». Мне неясно, в чем разница между ними, и мои поиски в Google не дали никаких приличных объяснений.

Я хотел бы понять различия между ними и в идеале увидеть примеры того, когда использовать один над другим.

17 из 26
источник
2
Не забывайте в качестве параметров вкладывать содержимое или менять шаблон элемента управления. Таким образом, вы можете внести довольно существенные изменения в элемент управления, не создавая пользовательский элемент управления.
MichaC
Именно то, что сказал MichaC. Лучшая часть WPF заключается в том, что создание шаблонов существующих элементов управления может оказать огромное влияние. Вы должны требовать пользовательских элементов управления редко. В отличие от WinForms, где даже незначительные изменения в элементе управления требуют нового производного элемента управления.
Микко Рантанен
Все еще полезно. Есть еще один золотой значок.
ouflak

Ответы:

117

На практике пользовательские элементы управления - это то, что вы реализуете на уровне кода, в то время как вы можете использовать XAML для пользовательских элементов управления. Пользовательские элементы управления расширяют один из базовых классов элементов управления WPF и предоставляют дополнительную функциональность посредством кода, поэтому вся добавленная логика и представление должны быть реализованы внутри кода.

Пользовательский элемент управления технически является обычным элементом управления контентом, который вы можете расширить в некоторых частях кода, но обычно он расширяется путем помещения в него других элементов управления. Так, как упомянул Кент, UserControl - это совокупность других элементов управления. Это значительно ограничивает возможности пользователя. Это проще в использовании, но более ограничено, чем полный пользовательский контроль.

Эти элементы управления имеют небольшую разницу с точки зрения времени выполнения. При создании приложения и размещении в нем элемента UserControl в дереве элементов управления будет содержаться конкретный шаблон UserControl. Так что, если мы рассмотрим неудачный пример специализированной кнопки. Если бы вы использовали пользовательский элемент управления, вы бы добавили кнопку внутри <UserControl>элемента. При использовании пользовательского элемента управления вы, скорее всего, получите сам элемент управления из кнопки. Разница будет видна в логическом дереве.

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

  • Окно
    • CustomButton

UserControl даст логическое дерево

  • Окно
    • CustomButtonUserControl
      • кнопка

Таким образом, в итоге UserControl - это просто обычный ContentControl, который вы можете немного расширить и для которого вы можете предварительно определить контент. Пользовательский контроль обеспечивает большую гибкость за счет простоты реализации, поскольку вам приходится выполнять всю логику и взаимодействие в коде, а не использовать преимущества XAML.

Хотя после всего этого я не думаю, что есть большая разница в шаблонах Visual Studio. Скорее всего, пользовательский элемент управления Visual Studio просто создает проект с пустым пользовательским элементом управления, в то время как проект пользовательского элемента управления является проектом с пустым пользовательским элементом управления. Позже вы можете добавить любые элементы в проект.

Обновить

И мое мнение о том, когда использовать пользовательский элемент управления и пользовательский элемент управления, заключается в том, что если вы можете что-то сделать с помощью пользовательского элемента управления, а дополнительный элемент управления в логическом дереве вас не беспокоит, используйте пользовательский элемент управления, поскольку их намного проще создавать и поддерживать. Используйте пользовательский элемент управления, только если у вас есть причина не использовать пользовательский элемент управления.

Микко Рантанен
источник
2
Можно ли использовать пользовательский элемент управления для объединения других элементов управления?
17 из 26
А как насчет скинов / временных проблем?
17 из 26
1
Не уверен, что вы подразумеваете под агрегированием. Вы не можете создать пользовательский элемент управления путем объединения других элементов управления. Однако вы можете извлечь из элемента управления Panel, такого как StackPanel, Grid или Panel, чтобы реализовать контейнер макета с пользовательским элементом управления (не уверен, что вы можете сделать это с пользовательским элементом управления).
Микко Рантанен
Да, но если вы просто хотите объединить другие элементы управления, это, вероятно, будет гораздо проще сделать с помощью элемента управления пользователя. В зависимости от того, что вы хотите сделать, пользовательский элемент управления может быть действительно трудным для написания, поэтому вы можете использовать пользовательский элемент управления, даже если он предоставляет только подмножество возможностей.
MichaC
1
Оба этих элемента управления должны иметь скины / шаблоны при правильной реализации. К сожалению, моя ссылка на WPF в настоящее время находится в офисе, поэтому я не могу проверить детали реализации.
Микко Рантанен
23

A Controlпредставляет некоторое поведение, которое можно скинуть (временно), тогда как a, как UserControlправило, представляет собой агрегацию более высокого уровня Controls, специфичную для приложения.

Более подробная информация доступна здесь .

Кент Бугаарт
источник
3
Это одна из ссылок, которые я нашел, которые не очень хорошо объясняли вещи :). Я предполагаю, что одна вещь, которую мне не хватает, это то, что на самом деле означает скины / шаблоны и почему это нельзя сделать с помощью пользовательского элемента управления. Кроме того, последнее предложение связанного поста «В общем и целом, пользовательские элементы управления обладают большей гибкостью и возможностью повторного использования, чем элементы управления пользователя». Если это правда, то зачем мне когда-либо создавать пользовательский элемент управления?
17 из 26