Перехід від Windows Forms до WPF


113

Вже давно я застряг у розробці Windows Forms (розпочався з VB6 і продовжився до C # .NET 4.5), і я в значній мірі досяг межі можливостей Windows Forms, використовуючи чисті .NET та спеціальні ефекти з Native Code.

Я намагався вивчити WPF та XAML, але я застряг прямо на новому дизайнері WPF. Це справді здається дуже важким у порівнянні з дизайнером Windows Forms.

Хочу знати, чи є альтернативи дизайнеру .NET WPF, які більше підходять розробникам Windows Forms?


7
Зазвичай я навіть не використовую дизайнера, за винятком перевірки, чи загальний макет - це те, що я очікував; врешті-решт я пишу все вручну в XAML та / або використовую Blend, коли це потрібно - хоча я не дизайнер, що ледве коли-небудь трапляється.
Patryk Ćwiek

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

5
Користуватися не важко, ви просто до цього не звикли. Найбільшою перешкодою для подолання є зміна парадигми між двома технологіями. Отримайте хорошу книгу про XAML, як тільки ви звикнете до XAML, ви навіть більше не будете користуватися дизайнером - ви наберете XAML безпосередньо.
slugster

3
@slugster, мені це було цікаво. Те саме трапилося і з HTML ... Я будував інтерфейс інтерфейсу за допомогою перемикача снів, а тепер кодую HTML вручну
Меттью Лейтон

Відповіді:


175

Мені подобається вести блог про статті для початківців для WPF, і є декілька, зокрема, які можуть вам допомогти:

Підводячи підсумок, найбільша різниця між Winforms та WPF полягає в тому, що у WPF ваш рівень даних (the DataContext) - це ваша програма, тоді як у Winforms ваш інтерфейс - це ваша програма.

Щоб переглянути це по-іншому, із WPF ваша програма складається з створених вами об'єктів, і ви використовуєте Шаблони та інші об’єкти інтерфейсу, щоб розповісти WPF, як намалювати компоненти додатків.

Це навпаки WinForms, де ви будуєте свою програму з об’єктів інтерфейсу та надаєте їм необхідні дані.

Через це дизайнер насправді не використовується так сильно, оскільки компоненти додатків розроблені в коді, і дизайнеру потрібно лише намалювати зручний інтерфейс, який відображає ваші класи даних (як правило, Modelsі ViewModels)

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

Отож, на вашу відповідь на запитання про те, чи є інші розробники WPF, які підходять для розробників WinForms, я б запропонував замість того, щоб шукати іншого дизайнера, а не шукати, щоб дізнатися, як використовувати WPF так, як це призначено для використання. Використання WPF, як-от WinForms, означає, що ви втрачаєте багато того, що робить його таким чудовим :)


14
Повністю згоден з @Rachel. Найголовніша реалізація, коли з’являється у світлі WPF, - це зрозуміти, що інтерфейс користувача не є Дані, і діяти відповідно.
Federico Berasategui

2
@Rachel - просто грати в захисника диявола: Починаючи з інтерфейсу користувача (кнопки, текстові поля тощо з'являються у вікні) допомагає зосередити програму на тому, що ви хочете зробити. Решта - лише деталі реалізації того, як ви хочете це зробити.
Асаф

3
@HighCore погляньте на stackoverflow.com/questions/982978/mvvm-for-winforms, і вам доведеться визнати, що Winforms - це лише перегляд / інтерфейс користувача, в якому бізнес-об’єкти можуть бути пов'язані з контролем користувачів. Гаразд: WPF більше підходить для MVVM, але, тим не менш, Winforms також може працювати в такому дизайні. І як Рейчел заявляє: "Це протилежність WinForms, де ви будуєте свою програму з об'єктів інтерфейсу, а потім надаєте їм потрібні дані". Це так неправда, хоча. Я завжди думаю так, як мінімум, "Дані та перегляд". Дані та Winforms / WPF / HTML, що завгодно.
Bernoulli IT

2
Він підтримує прив'язку даних принаймні на рівні введення / модифікації даних. І ці 99,9999999% розробників також зіпсуються в WPF, я підозрюю. Але закінчимо цю дискусію. WPF абсолютно потужніший / підходить для MVVM та роз'єднання проблем, але я думаю, що ви, а також Рейчел натискаєте Winforms в негативний кут. Особливо, коли ви продовжуєте вживати слова, які вживаєте ...
Bernoulli IT

3
@YoupTube Ви маєте рацію, Winforms підтримує прив'язку даних, і ви можете створити свої власні прив’язки для випадків, коли система прив'язки за замовчуванням теж не працюватиме. Я написав цю відповідь і мої статті в блозі з початківцями на увазі, і, як правило, початківці мислять з точки зору компонентів інтерфейсу, а не об'єктів даних. Крім того, прив'язка в WinForms не завжди існувала в тому стані, як зараз, тому багато розробників, які виросли з WinForms, або які звикли до інших технологій, які не використовують прив'язки, часто не визначають цю ключову різницю при переключенні до пов'язаної архітектури. :)
Рейчел

9

Хоча деякі люди не згодні, я також рекомендую не використовувати дизайнер VS. Принаймні не створювати інтерфейс. Якщо ви можете отримати перше враження про вашу реалізації без запуску програми, це хороший глядач , по крайней мере до тих пір , немає складних речі , як Stylesі Templatesвикористовується. Але, IMHO, результат його перетягування повинен використовуватися лише як прототип, а тому відкидати його вже не потрібно.

Ось кілька причин, які для мене важливі, щоб не використовувати його.

  1. Дизайнер VS працює з полями вирівнювання та вирівнюваннями (що, як правило, не потрібно, якщо ви використовуєте елементи управління компонуванням), означає, що вам потрібно торкнутися багатьох елементів керування, якщо вимоги змінені. Якщо ви поглиблені в XAML та механіці WPF, ви можете створити додатки, які можна змінити з невеликими зусиллями, що стосується зовнішнього вигляду.

  2. Оскільки дизайнер генерує xaml, композиція не є оптимальною, і інтерфейс може працювати погано. Я не вимірював це, це просто почуття.

Набагато краща альтернатива - MS Blend , хоча початок - все інше, але просто. Результат його перетягування набагато краще, ніж результат дизайнера VS.
Але це досить потужний інструмент, який допомагає використовувати досить потужні елементи для створення найсучаснішого інтерфейсу. Рекомендую відвідати хоча б короткий семінар, щоб зрозуміти його можливості.

Повернімось до вашого питання, IMHO, і я думаю, що багато людей згодні, отримайте собі хорошу книгу, наприклад, WPF Unleashed та пізніше, якщо ви хочете дізнатися більше про деталі, WPF Pro . Є багато можливостей, які відрізняються Winforms. Ви не познайомитесь з ними за допомогою будь-якого дизайнера. Я думаю, що це найкращий підхід.

Також врахуйте, що існує багато фреймворків та бібліотек (наприклад, MVVM light , WPFToolkit ), які вже вирішують деякі загальні проблеми. Тому не потрібно винаходити колесо.


9

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

Наприклад, ви можете переключитися з макета на основі Winforms на основі поля, що є типовим, коли ви скидаєте елемент керування, на більш стильний стиль WPF, клацнувши правою кнопкою миші та вибравши "Скинути макет"

Це відео висвітлює подібну основу.

Я все ще віддаю перевагу дизайнеру VS2010 на балансі - VS2013, здається, трохи помиляється при перетягуванні та переході на TabItems **, (який у моєму поточному проекті використовується багато), але перегляд документа VS2013 дозволяє переміщувати речі і в цьому огляді , що може бути справжнім плюсом.

Дійсно, однак, щоб отримати максимальну користь від WPF та xaml, вам потрібно досить добре володіти як дизайнерським видом, так і видом xaml та перемикатися між ними; якщо ви ухиляєтесь від дизайнера, ви пропускаєте щось, що може вам дуже допомогти.

** Редагувати - хоча це, здається, було вдосконалено в оновленнях 3 для VS 2013, а також у попередніх переглядах VS14, на сьогоднішній день я все-таки спостерігаю дивну поведінку часом.


7

Перш за все, у WPF (XAML) в Visual Studio deisgner, ви завжди повинні використовувати код xaml для створення вашого інтерфейсу користувача і не перетягувати і контролювати! Потрібно зберегти чистий код. Ви можете використовувати суміш Expression Blend, вона більш графічно орієнтована з перетягуванням, але це не безкоштовно.

Це не велика крива навчання, але я думаю, ви повинні навчитися робити свій ксамл вручну, а не шукати альтернативу.


1
Перетягування-ні-крапля не шкодить, хоча якщо ви віддаєте перевагу вводу, це теж добре. Введення вручну ніколи не є ключовим для WPF.
Девід,

3
Коли ви перетягуєте WPF, я бачу, що часто у вас є велика запас -1200 і такі речі, що взагалі не мають сенсу ... Я завжди це робив вручну, краще
точно

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

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

12
Я думаю, що порадити комусь, хто приїжджає з Forms та запустив WPF, не використовувати дизайнера - це дуже погана ідея. Найшвидший спосіб зрозуміти XAML - це використання перетягування та перегляду коду.
Ucodia

7

Я пройшов цей процес, як і ви. Згодом я навчав усіх у своїй компанії WPF. Є кілька важливих уроків, які я засвоїв, і всі, кого я знаю, хто працюють з WPF.

  1. Якщо ви працюєте з елементами управління користувальницьким інтерфейсом у коді позаду, .... Тоді ви робите це неправильно. Немає необхідності в роботі з елементами управління інтерфейсом у коді позаду.
  2. Вам не потрібен візуальний розробник для натискання на нього. Ви набагато продуктивніші, займаючись лише XAML. Використовуйте Копіювати / Вставити. Не довіряйте своїм можливостям набору тексту. Це вбереже багато головних болів.
  3. Подумайте про XAML просто як про вікно, яке перекриває дані. У коді позаду ви змінюєте дані. У XAML ви визначаєте, як інтерфейс інтерпретуватиме дані.
  4. Перетворювачі дивовижні. Як тільки ви отримаєте ключову кількість конвертерів, ваша продуктивність зробить небо високою. Вони візьмуть на себе роль шаленої кількості контролерів подій, які приховують або змінюють розмір, або що-небудь про інтерфейс,

Це робить розвиток інтерфейсу цікавим. Особливо, коли ви дізнаєтеся, як йому подобається грати разом з процесами Asyc. Це дійсно забирає багато головних болів, які були викликані Winforms.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.