На практике пользовательские элементы управления - это то, что вы реализуете на уровне кода, в то время как вы можете использовать XAML для пользовательских элементов управления. Пользовательские элементы управления расширяют один из базовых классов элементов управления WPF и обеспечивают дополнительную функциональность посредством кода, поэтому вся добавленная логика и представление должны быть реализованы внутри кода.
Пользовательский элемент управления технически является обычным элементом управления контентом, который вы можете расширить в некоторых частях кода, но обычно он расширяется путем помещения в него других элементов управления. Так, как упомянул Кент, UserControl - это совокупность других элементов управления. Это значительно ограничивает возможности пользователя. Это проще в использовании, но более ограничено, чем полный пользовательский элемент управления.
Эти элементы управления имеют небольшое отличие с точки зрения времени выполнения. При создании приложения и размещении в нем элемента UserControl дерево элементов управления будет иметь конкретный шаблон UserControl. Так что, если мы рассмотрим неудачный пример специализированной кнопки. Если бы вы использовали пользовательский элемент управления, вы бы добавили кнопку внутри элемента <UserControl>
. При использовании пользовательского элемента управления вы, скорее всего, получите сам элемент управления из кнопки. Разница будет видна в логическом дереве.
В то время как пользовательский элемент управления будет предоставлять логическое дерево, подобное
UserControl выдаст логическое дерево
Таким образом, в итоге UserControl - это просто обычный ContentControl, который вы можете немного расширить и для которого вы можете заранее определить контент. Пользовательский элемент управления обеспечивает большую гибкость за счет простоты реализации, поскольку вам приходится выполнять всю логику и взаимодействие в коде, а не использовать преимущества XAML.
Хотя после всего этого я не думаю, что есть большая разница в шаблонах Visual Studio. Скорее всего, пользовательский элемент управления Visual Studio просто создает проект с пустым пользовательским элементом управления, в то время как проект пользовательского элемента управления является проектом с пустым пользовательским элементом управления. Позже вы можете добавлять любые элементы в проект.
Обновление
И мое мнение о том, когда использовать пользовательский элемент управления и пользовательский элемент управления, заключается в том, что если вы можете что-то сделать с помощью пользовательского элемента управления, а дополнительный элемент управления в логическом дереве вас не беспокоит, используйте пользовательский элемент управления, поскольку они Гораздо проще создавать и поддерживать. Используйте пользовательский элемент управления только в том случае, если у вас есть причина не использовать пользовательский элемент управления.