Właśnie zbliżam się do prędkości w WPF i chciałbym utworzyć kontrolkę WPF wielokrotnego użytku.
Kiedy patrzę na opcje tworzenia projektów w programie Visual Studio, widzę „Bibliotekę kontroli użytkownika WPF” i „Bibliotekę niestandardowych formantów WPF”. Nie jest dla mnie jasne, jaka jest różnica między nimi, a moje wyszukiwania w Google nie przyniosły żadnych przyzwoitych wyjaśnień.
Chciałbym zrozumieć różnice między nimi i najlepiej zobaczyć kilka przykładów, kiedy należy ich używać.
wpf
user-controls
custom-controls
17 z 26
źródło
źródło
Odpowiedzi:
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.
źródło
A
Control
reprezentuje pewne zachowanie, które można modyfikować (szablon), podczas gdy aUserControl
jest generalnie agregacjąControl
s wyższego poziomu , specyficzną dla aplikacji.Więcej informacji tutaj .
źródło