Яка різниця між бібліотекою управління користувачем та користувацькою бібліотекою управління?


168

Я просто набираю швидкість на WPF і хотів би створити багаторазовий контроль WPF.

Коли я переглядаю варіанти створення проектів у Visual Studio, я бачу "Бібліотеку керування користувачами WPF" та "Спеціальна бібліотека управління WPF". Мені незрозуміло, в чому різниця між ними, і мої пошуки в Google не знайшли гідних пояснень.

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


2
Не забувайте вводити вміст або змінювати шаблон керування як параметри. Таким чином, ви можете внести досить кардинальні зміни в елемент керування без необхідності писати спеціальний елемент керування.
MichaC

Просто те, що сказав MichaC. Найкраща частина WPF полягає в тому, що шаблони існуючих елементів управління можуть мати величезний вплив. Ви повинні вимагати користувацьких елементів контролю рідко. Це не схоже на WinForms, де навіть незначні зміни в елементі управління вимагали нового похідного контролю.
Мікко Рантанен

Ще корисна. Майте ще один золотий знак.
ouflak

Відповіді:


117

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

Користувальницьке управління технічно є звичайним контролем вмісту, яке ви можете розширити в деяких частинах коду, але зазвичай воно розширюється, розміщуючи в ньому інші елементи управління. Так, як Кент згадував, UserControl - це сукупність інших елементів управління. Це значно обмежує те, що ви можете зробити з контролем користувача. Це простіше у використанні, але більш обмежено, ніж повний спеціальний контроль.

Ці елементи керування мають невелику різницю з точки зору виконання. Під час створення програми та розміщення в ній UserControl дерево керування всередині нього матиме конкретний шаблон UserControl. Тож якщо ми розглянемо кульгавий приклад спеціалізованої кнопки. Якщо ви використовували керування користувачем, ви додали б кнопку всередині <UserControl>елемента. Якщо ви користуєтеся спеціальним елементом керування, то ви отримаєте саме управління з кнопки. Різниця була б помітна в логічному дереві.

Хоча користувацький контроль забезпечить логічне дерево, подібне до

  • Вікно
    • CustomButton

UserControl дасть логічне дерево

  • Вікно
    • CustomButtonUserControl
      • Кнопка

Отже, врешті-решт, UserControl - це просто звичайний ContentControl, який ви можете трохи розширити і для якого ви можете заздалегідь визначити вміст. Спеціальний контроль забезпечує більшу гнучкість за ціною простоти реалізації, оскільки ви повинні виконувати всю логіку та взаємодію в коді, а не мати перевагу XAML.

Хоча після всього цього, я не думаю, що в шаблонах Visual Studio немає такої різниці. Швидше за все, Visual Studio Custom Control просто створює проект із порожнім спеціальним керуванням, тоді як проект «User Control» - це проект із порожнім контролем користувача. Пізніше ви можете додати будь-які елементи до проекту.

Оновлення

І моя думка щодо використання користувальницького управління та контролю за користувачем полягає в тому, що якщо ви можете зробити щось з керуванням користувача, а додатковий елемент управління в логічному дереві вас не турбує, використовуйте керування користувачами, оскільки вони набагато простіше створювати та підтримувати. Використовуйте спеціальний елемент керування, лише якщо у вас є причина не використовувати керування користувачем.


2
Чи можна використовувати спеціальний елемент керування для об'єднання інших елементів керування?
17 з 26

А як щодо питання, що стосується скин / шаблону?
17 з 26

1
Не впевнений, що ви маєте на увазі підсумовуючи. Неможливо створити спеціальний елемент керування, агрегуючи інші елементи управління. Однак ви можете отримати таке управління панелі, як StackPanel, Grid або Panel, щоб ви могли реалізувати контейнер макета за допомогою спеціального керування (Не впевнений, чи можна це зробити за допомогою User Control).
Мікко Рантанен

Так, але якщо ви просто хочете об'єднати інші елементи управління, можливо, це буде набагато простіше зробити з управлінням користувача. Залежно від того, що ви хочете зробити на власному керуванні, важко написати, тому ви хочете скористатися User Control, хоча він надає лише підмножину можливостей.
MichaC

1
Обидва ці елементи управління повинні бути скинними / шаблоновими, коли реалізовано правильним чином. На жаль, наразі моя посилання на WPF знаходиться в офісі, тому я не можу перевірити деталі впровадження.
Мікко Рантанен

23

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

Більше інформації можна отримати тут .


3
Це одне з посилань, які я знайшов, що не дуже добре пояснив речі :). Я думаю, одне, чого мені не вистачає, - це те, що насправді означає skinnable / templatable, і чому це неможливо зробити з контролем користувача. Крім того, останнє речення пов’язаної публікації - "Взагалі та просто кажучи, користувацькі керування мають кращу гнучкість та повторне використання, ніж контролі користувачів". Якщо це правда, то навіщо мені взагалі хотіти створити керування користувачем?
17 з 26
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.