W praktyce kontrolki niestandardowe to coś, co implementujesz na poziomie kodu, podczas gdy możesz używać XAML dla kontrolek użytkownika. Kontrolki niestandardowe rozszerzają jedną z klas bazowych formantów WPF i zapewniają dodatkowe funkcje za pośrednictwem kodu, więc cała dodana logika i reprezentacja muszą zostać zaimplementowane w kodzie.
Kontrolka użytkownika to z technicznego punktu widzenia normalna kontrolka zawartości, którą można rozszerzyć w niektórych częściach kodu, ale zwykle jest ona rozszerzana przez umieszczenie w niej innych kontrolek. Tak więc, jak wspomniał Kent, UserControl jest agregacją innych kontrolek. Ogranicza to znacznie to, co możesz zrobić z kontrolką użytkownika. Jest łatwiejszy w użyciu, ale bardziej ograniczony niż w pełni niestandardowa kontrola.
Te kontrolki mają niewielką różnicę z punktu widzenia środowiska wykonawczego. Podczas budowania aplikacji i umieszczania w niej UserControl, drzewo kontroli będzie zawierało konkretny szablon UserControl. Więc jeśli weźmiemy pod uwagę kiepski przykład wyspecjalizowanego przycisku. Gdybyś używał kontrolki użytkownika, dodałbyś przycisk wewnątrz <UserControl>
elementu. Korzystając z niestandardowej kontrolki, najprawdopodobniej wyprowadzisz ją z przycisku. Różnica byłaby widoczna w drzewie logicznym.
Podczas gdy kontrolka niestandardowa zapewniłaby drzewo logiczne podobne do
UserControl dałoby logiczne drzewo
Ostatecznie UserControl jest zwykłym ContentControl, który można nieco rozszerzyć i dla którego można wstępnie zdefiniować zawartość. Kontrola niestandardowa zapewnia większą elastyczność za cenę łatwości implementacji, ponieważ musisz wykonać całą logikę i interakcję w kodzie, zamiast korzystać z zalet języka XAML.
Chociaż po tym wszystkim nie sądzę, aby było tak wiele różnic w szablonach Visual Studio. Najprawdopodobniej kontrolka niestandardowa programu Visual Studio po prostu tworzy projekt z pustą kontrolką niestandardową, podczas gdy projekt kontroli użytkownika jest projektem z pustą kontrolką użytkownika. Możesz później dodać do projektu dowolne elementy.
Aktualizacja
A moja opinia na temat tego, kiedy używać kontroli niestandardowej i kontroli użytkownika, jest taka, że jeśli możesz coś zrobić za pomocą kontrolki użytkownika, a dodatkowy element kontrolny w drzewie logicznym Ci nie przeszkadza, użyj kontroli użytkownika, ponieważ są one o wiele łatwiejsze do wykonania tworzyć i utrzymywać. Użyj kontrolki niestandardowej tylko wtedy, gdy masz powód, aby nie używać kontrolki użytkownika.