Графічний інтерфейс Windows: WPF або WinRT (2015+)


94

Я намагаюся отримати огляд різних технологій, які можна використовувати при побудові графічного інтерфейсу в Windows World.

Для контексту я будую маленьку багатокористувацьку гру на 2 платформах. (Тільки для навчальної мети ..)

Мій учитель каже, що вважає, що WPF - це правильний шлях, але, схоже, він порівнює його лише з Windows Forms.

Я розумію, що тут у 2015 році Windows Forms абсолютно мертвий?

У цьому іншому питанні питання, що вони говорять, WinRT + XAML призначений для побудови графічного інтерфейсу Metro (річ з плитками Window 8!), І здається, що WPF - це те, що використовується лише для робочого столу у вікні 7/8 і тісно пов'язане з Silverlight ..

Як Windows 8 Runtime (WinRT / додатки Windows Store / Windows 10 Universal App) порівнюється із Silverlight та WPF?

  • На робочому столі живуть старі програми (червоний. WFP).
  • Новий клас додатків, програми Metro, можна будувати різними способами, в тому числі за допомогою VB.NET, C # або C ++. Ці три мовні параметри можуть використовувати XAML для побудови інтерфейсу. Альтернативою є використання JavaScript / HTML5 / CSS для розробки як інтерфейсу, так і коду програми.

Моє справжнє запитання: чи немає ЄДИНОГО хорошого способу побудови графічного інтерфейсу у Віконному світі?

Якщо ні, то які технології слід використовувати у вікнах 7, вікні 8 (на робочому столі та метро), віконному телефоні, (і Windows 10!) І навіть x-box ..

Чи можна порівняти таким чином різні технології?

Як ви вважаєте, на що правильно вкладати час?


5
"WPF або WinRT?". Дізнайтеся і те, і інше, WPF для робочого столу, Windows Runtime для мобільних пристроїв. Ці технології мають багато спільного, наприклад, XAML та дуже схожий фреймворк. Ви навіть можете написати код, який підтримує обидві платформи, як портативні бібліотеки класів.
Клеменс

2
@Clemens Останній біт трохи вводить в оману. Для роботи з додатками WinRT стандартні бібліотеки .NET повинні бути перероблені / націлені, що може вимагати змін коду для певних класів.
BradleyDotNET

3
Windows Forms не є повністю мертвим, але ви, мабуть, не хочете використовувати його, якщо ви вже не знайомі з ним.
Кейсі

2
На мій погляд, ваша мета "залишатися в курсі графічного інтерфейсу Windows" досить шкідлива. У цього мало перспективи для пересічного розробника в довгостроковій перспективі. MS стільки разів змінювала свої інструменти для графічного інтерфейсу, поки JavaScript та HTML5 постійно набирали популярності. Якщо ти живеш на життя, забудь про все. Невеликі винятки з цього, якщо ви працюєте для MS або сторонніх постачальників GUI або готові дотримуватися збереження старого коду.
NoChance

3
Навіть MFC не зовсім мертвий, і не Win32 теж. Але MFC для ігор - це те, що виберуть безумці
Лотар

Відповіді:


132

Тут багато чого, але тут іде:

  • Чи загиблі форми Windows Forms (Winforms) ? Ні. Його все ще активно підтримують. Тим не менш, це жахлива технологія для роботи (принаймні, коли ви знаєте магію WPF)
  • Якщо ви хочете створити симпатичний, добре продуманий робочий стіл (класичний, а не метро), WPF - це відповідь чисто .NET-поняттям. ви можете використовувати API WinRT (наприклад, їх класи сокетів), але ви не можете запустити їх на ОС перед Windows 8. Користувацький інтерфейс все ще є WPF.
  • Програми WinRT призначені для магазину Windows 8 (вони також доступні в магазині Windows 10). Ви не можете використовувати тут WPF або WinRT на робочому столі, тому місце розгортання визначає, що ви використовуєте. Ви правильно розумієте наявні мови / технології.
  • Windows Phone 8 (зараз застаріла) використовує модифікований час роботи WinRT (це змінилося в Windows 10). Для програми Win8 / WP8 ви можете використовувати додатки "Універсальний", щоб поділити більшу частину коду між стандартним додатком WinRT та програмою Windows Phone.
  • У Windows 10 використовується універсальна платформа Windows (UWP), заснована на .NET Core. Код, розроблений для Windows 10, також можна використовувати в Xbox One, Windows Phone 10 та HoloLens. WPF як і раніше для "стандартних" додатків для настільних ПК.
  • XBox хитрий. XNA відійшла, і Microsoft, схоже, відходить від створеного спільнотою вмісту для платформи. При цьому Unity3D може розгортатися до XBox, і я вважаю, що для цього працює стандартна розробка DirectX (C ++). Універсальні програми для платформи Windows також можуть бути розгорнуті на Xbox One, і це, мабуть, є стратегією Майкрософт у майбутньому.

Що стосується того, на що витратити час, це залежить від того, на що ви орієнтуєтесь :). Вивчення WPF / UWP + XAML принесе вам багато переваг, якщо ви хочете залишатися "в курсі" розробки .NET GUI, так що я б пішов. WPF має найбільшу кількість функцій, тому, починаючи там, вам просто потрібно знайти обхідні шляхи для того, чого не вистачає в UWP (або будь-якій іншій технології на базі XAML).

Якщо ви це зробите, обов'язково вивчіть модель MVVM (Model-View-View Model). Це дуже добре працює з технологіями на базі XAML і дозволяє ділитися великою кількістю логіки між вашими програмами WPF та UWP. Ця ж логіка може бути використана також, якщо ви врешті-решт розробляєте програми Xamarin для iOS / Android тощо.

Зверніть увагу, що для справжньої розробки ігор вам потрібен справжній ігровий фреймворк (наприклад, Unity3D або навіть XNA). Ви можете зробити це в WPF, і це кращий вибір, ніж Winforms, але жоден з них насправді не призначений для ігор.


Дякую за відповідь. У мене є міні-гра, яка розпочалася з XNA, тому мені шкода, що вони її видалять. Але я з нетерпінням чекаю, що Windows 10 нам принесе.
Альф Нільсен,

@AlfNielsen Я не впевнений, коли закінчується підтримка, але, безумовно, здається, вони не скоро її оновлюватимуть.
BradleyDotNET

2
Схоже, VS збирається отримати повну підтримку Unity, тож похвала щодо прогнозування цього! :)
BK

2
Швидкість візуалізації WPF за допомогою класів WPF, таких як Visual, жахлива для ігор або будь-чого іншого в режимі реального часу.
Вінгер Сендон

2
@WingerSendon Подивіться RenderTransform, Viewport3Dтощо. Вони апаратно прискорені.
BradleyDotNET

26

Це досить стара нитка, але, як я натрапив на це через Google (з-за інтересу), можливо, хтось інший також міг би доїхати сюди. Це питання, яке знову і знову задають нові програмісти. Тож я хотів би відповісти на деякі речі, тепер, коли Windows 10 офіційно випущений.

По-перше, більше не слід починати з Windows Forms. Наразі це найзріліша технологія, але подальших розробок Windows Forms не буде, вона зараз лише на стадії обслуговування. WPF активно розвивається (востаннє я читав). Але тепер, Універсальні програми Windows (WinRT) більше не потрібно використовувати в повноекранному режимі, і їх можна використовувати у віконному режимі так само, як і інші настільні додатки (WPF & WinForms). Це значно збільшує їхню корисність на не-планшетних комп'ютерах. Я вірю, що це буде майбутнє і для настільних додатків. Хоча, програмне забезпечення WPF - це традиційні настільні додатки (без дозволів, лише UAC). У будь-якому випадку, незалежно від того, як ви вивчите розробку WPF або WinRT (використовуючи .Net), ви в кінцевому підсумку вивчите і те, і інше. Вони обидва є XAML + C # (або якоюсь іншою мовою .Net). Я тільки вивчав WPF, коли WinRT вийшов із Windows 8. Я почував себе як вдома, лише кілька незначних змін, до яких ти звикнеш дуже скоро. Не впевнений у сценарії MVVM (прив'язка даних) у WinRT. Я досі вивчаю цей аспект WPF.

Щойно запущено вікно 10. Windows 8 / 8.1 не отримав такого успіху, як Windows 7. Отже, якщо ви хочете створити додаток, який має широку аудиторію, вам слід зараз працювати з WPF. Але найближчим часом WinRT буде правильним шляхом.

На ваше запитання: "які технології слід використовувати у Windows 7 , Windows 8 (настільні та метро), Window Phone (та Windows 10!) І навіть x-box.", Одна відповідь - Windows Universal Apps. Саме з цієї причини була розроблена ця структура. Одна технологія, яка буде використана для розробки програм для всіх пристроїв. Настільний ПК, планшетний ПК, телефони (включаючи Android, використовуючи Xamarin у комплекті з Visual Studio 2015), Xbox та IoT (Інтернет речей).


19
Універсальні програми, здається, не працюють на Windows7 або Windows8. "Універсальні програми" є лише "універсальними" для пристроїв Win10.
Dragontamer5788

Xamarin все ще є власною справою (немає Universal Apps), і я не впевнений, що вони також можуть розгорнутися до Xbox.
BradleyDotNET

2
@PrateekJain: НІ на управлінні UWP додатків на Windows 8: stackoverflow.com/a/30317960/199364
ToolmakerSteve

6
WinForms все ще чудово підходить для швидких і брудних графічних інтерфейсів - WPF приємний, але вимагає багато типового коду (і крутої кривої навчання), щоб використовувати "правильно", навіть без MVVM. Це гадає, що WPF не має справжніх можливостей RAD - і що XAML просто настільки небезпечний багатослівний .
Дай

1
Для всіх пристроїв моєї дупи. Микрософт знову розмовляє, якнайкраще. Як і в старі часи, коли вони називали її кросплатформенною, оскільки вона працювала на Windows95 та Windows2000. Інша справа, що я ніколи не хочу, щоб настільні програми мали однакові потворні розміри кнопок і особливо дерев та списків, якими я повинен користуватися для дотику. Тому для мене не було UWP
Лотар

23

Я спробую відповісти лише на ваше запитання:

Windows Forms повністю мертвий?

Ні, технологія Windows форм не мертва. Я скажу тобі чому. WPF і XAML - це дуже всебічна і складна технологія, і ви можете створити дуже приємний інтерфейс користувача. Але! Ця технологія вимагає глибоких знань. Для базових макетів вам не потрібно стільки знань, але для деяких просунутих макетів ви повинні мати глибокі знання, і коли я почав використовувати цю технологію і витратив багато часу на пошуки порад щодо google. Тому, коли мені потрібні прості форми для введення користувачем, я завжди вибираю технологію Windows Forms, яка є дуже простою та зрозумілою. Це також причина, чому ця технологія була дуже успішною, коли з’явилася у світі. Коли ви починаєте з WPF, вам також потрібно знати, що таке модель дизайну MVVM, і деякі не досвідчені програмісти плутають це.


3
Це моя улюблена відповідь. Для невеликих програм я використовую Windows Forms, оскільки так швидко і легко розпочати роботу. Для складного виробничого коду я використовую C ++ (з WTL) та побічний .NET.
Робінзон

8
Для читачів, не знайомих з WPF, деяке уточнення - для базових макетів додатків WPF вимагає більш-менш однакових зусиль. Шаблон програми VS WPF за замовчуванням забезпечує ту саму вихідну точку, що і WinForms. MVVM зовсім не обов’язковий для роботи з WPF, але насправді використання Binding без будь-якого фреймворка MVVM також легко для простих додатків. WPF технологічно наближений до WinRT та UWP, тому, будь ласка, припустимо, що для Windows Forms є мертвим ні для чого іншого, ніж для підтримки застарілих програм.
теж

3
Winforms чудово підходить для створення консольного додатку new age. Наприклад, надзвичайно базове управління вкладками з купою кнопок та введенням користувача, що ефективно впливає на те, що зазвичай буде консольним додатком.
котиться

16

Зараз квітень 2016 року, і досі немає однозначної відповіді на це. Ми розробляємо дуже сучасний настільний додаток для моніторингу продуктивності в режимі реального часу, який повинен відображати кілька діаграм та дисплеїв, змішаних з текстом та різною іншою графікою. Нашим додатком є ​​C #, WPF з .NET Framework 4.5.2, але ми все ще пишемо деякі компоненти за допомогою WinForms та GDI +, щоб отримати прийнятну продуктивність. Ми просто не досягли цього з WPF. Ми навіть розробили кілька дисплеїв у програмі з DirectX, але це додає багато складності, яку можуть підтримати лише деякі з команди. Простота та чиста швидкість, яку ми можемо отримати від розміщення дисплея WinForms у межах WPF, а також швидкість GDI + дає нам те, що нам потрібно у дорогій чистої структури View / ViewModel, а також доводиться вирішувати різні проблеми повітряного простору. Наш додаток є досить спеціалістом, і я хотів би взагалі позбутися WinForms, але, на жаль, це ще не можливо в нашому випадку. Для чистої продуктивності вам потрібно буде перейти або DirectX, або WinForms.


1
Я скажу вам, що деякі речі є більш ефективними в WinForms. Є й інші речі (зокрема, анімації), для яких справжнє реверс. Звичайно, перейти до прямого DirectX, мабуть, було б навіть краще, але ніхто не хоче робити цього, як ви вказали.
BradleyDotNET

1
Після WinRT я вирішив почати шукати деінде. Мої клієнти, і я не можу надто розраховувати на те, що хоче Microsoft, оскільки це впливає на мою та мою клієнтів. Зараз я дивлюся на власну програму, яка використовує локальний веб-сервер для локального обслуговування сторінок додатків у веб-переглядачі користувача або вбудованого керування браузером у додатку WinForm / WPF. Це спрощує розробку, зближує мене з сумісністю між платформами і, очевидно, зменшує витрати.
TheLegendaryCopyCoder

6

Мої два центи ... якщо ви хочете справжніх універсальних додатків, тобто програм, які можуть працювати на будь-якій операційній системі настільних ПК, включаючи Windows, WinForms - це все-таки шлях. Просто переконайтеся, що ви залишаєтесь сумісними CLR, і ви зможете розгорнути на Mac та Linux через Mono. Величезна вигода. XAML може бути крутим, але він не збирається переноситися на інші операційні системи.

Я особисто вважаю жахливою бізнес-модель UWP з пісочницею (з витримкою?); він протидіє відкритості, за якою виступає Windows з самого початку.


4

Я працюю з технологіями Microsoft понад 10 років. Найголовніше, чого я навчився, - це не просто слухати, що пропонує вам Microsoft. Коли Microsoft каже, що це майбутнє, вона має 50% шансів помилитися. Microsoft напевно зробить все можливе, щоб просувати товари, на які вони інвестували, але це не означає, що вам слід слідувати. Подивіться, що трапиться з WCF та Silverlight.

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

Дотримуючись шаблону MVVM, ви виявите, що робити щось порівняно легко в WinForm може стати дуже складним завданням у WPF. Як і пофарбуйте клітинку на основі певного стану після оновлення, або прокрутіть рядок у поданні та виділіть його.

Звичайно, ви можете сказати, що вам не потрібно робити MVVM. Просто покладіть свій код у код позаду і змусьте його працювати. Так, це спрацює, але який сенс використовувати WPF? Чому б просто не використовувати форму Win?


1
Я погоджуся, що WPF має інтенсивну криву навчання, але як тільки ти пройдеш це, до WinForms просто не повернешся ніколи.
Krythic

4

Це стара тема, але важлива з поточним прогресом рамки .NET, функціями c # та збільшенням уваги на c # як виборі розробки ігор.

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

WinForms, перебуваючи в режимі технічного обслуговування, все ще залишатиметься правильним вибором на довгі роки. Це перевірено часом і стабільно. З того, що я бачив, навіть у 2017 році WinForms як і раніше є найпоширенішою платформою, обраною для розробки ігор на базі c #.

Переглядаючи дані опитування обладнання Steam, ви бачите, що на момент написання цієї відповіді (липень 2017 р.) Windows 10 64-розрядний тепер є домінуючою ігровою платформою ПК на 50% ринку, а за нею - 64-розрядна версія Windows 7 на 32% та Windows 8.1 64-розрядні майже 7%. Частка ринку всіх інших платформ ОС настільки мала, що навряд чи варто розглядати щось інше, крім цих трьох.

Оскільки це сучасний стан ігор на ПК, WinForms - це найпоширеніший знаменник для націлювання на всі 3 найкращі платформи ПК. Дивлячись у майбутнє, UWP стане найкращою цільовою платформою для розробки ігор c #, оскільки Windows 7 і 8 втрачають значну частку ринку в порівнянні з Windows 10, якщо не з’явиться нова платформа, яка замінить її. Так це лише за номерами.

Якщо вибирати, виходячи з найкращого рівня сумісності для кожної платформи ОС, замість того, щоб підтримувати максимальну частку ринку, вибір був би більш схожий:

  • Windows 10: UWP
  • Windows 8.1: WinRT або Магазин Windows
  • Windows 7: WinForms

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


Незважаючи на те, що точка зору на gamedev є цікавою, я не розумію, чому ви б обрали графічний інтерфейс GUI для gamedev, де у вас є повнофункціональний ігровий движок для C # як Unity. Лише кілька ігор, які я бачив із класичним графічним інтерфейсом, були для видання даних про ігри (наприклад, редагування карт / активів)
Uwy

2
З тієї ж причини вони вибирають ігровий движок: це досить багато роботи над створенням власного вікна та ефективно керуванням ним із керованого коду самостійно.
Майк Джонсон

3

WinRT вже давно на робочому столі, я пишу WinRT, який працює на моєму deskop. А під Windows 10 ці програми підтримуватимуть місця, що не закріплені (вікна, як ви їх традиційно знаєте).

Я б не рекомендував WinForms або WPF нікому, починаючи сьогодні. Вони повинні вивчати WinRT / XAML насамперед. І вивчіть деякі Win32 / .net, коли їм це потрібно, залежно від обраної ними мови.

"вони кажуть, що WinRT + XAML призначений для будівництва графічного інтерфейсу Metro (річ з плитками Window 8!)" - Це така завищена абстракція, що вона марна. WinRT - це час виконання, як і Win32, це не лише для GUI, тому те, що вони говорять, є повним BS. XAML - це рівень інтерфейсу користувача (подібно до XAML у WPF), але говорити, що це графічний інтерфейс метрополітенів - це також неправильно. XAML - це шар інтерфейсу Windows. І "річ із плиткою Windows 8!" виражає бачення тунелів певних народів. Мені б хотілося сказати, що Win32 - це пункт меню меню "Пуск". Ви бачите, наскільки смішним є це твердження.


8
Щоб пояснити моє початкове твердження, WinRT не можна використовувати для створення "традиційного" настільного додатка. З цієї причини, серед інших, є безліч причин вивчити WPF (WinForms, не так багато). Якщо нічого іншого, ви одночасно ефективно вивчите WinRT (як я зазначив у своїй відповіді). Крім того, ми ще не наблизились до точки, де програми WinRT керують ринком (особливо лінійки бізнес-додатків). WPF все ще надзвичайно цінний.
BradleyDotNET

7
Якщо WinRT не прив’язаний до створення програм у повноекранному режимі, чи можете ви сказати мені, як ви можете використовувати його для створення віконного додатка, який працює на будь-якій фактично випущеній версії Windows? Або як використовувати його для написання програми, яка працює на більш ніж 10% комп’ютерів Windows (тобто Windows 7 і XP)? Я припускаю, що більшість розробників хочуть мати можливість націлити більше ніж на 10% користувачів Windows. Поки Windows 8 або 10 не отримає серйозної частки ринку, WPF все ще буде необхідний для багатьох додатків. WinRT може бути середовищем виконання, але це не змінює той факт, що він не може отримати доступ до багатьох речей (повних), які може мати Win32.
Джон Коландуоні,

1
@JohnColanduoni, як він сказав, для тих, хто починає сьогодні (14 березня), WinRT - це шлях, win10 був і є безкоштовним як оновлення протягом декількох місяців і буде ще кілька місяців, так що так, win10 захоплює величезна частка ринку. так, не всі перейшли до win10, але також кілька днів тому ми з’ясували, що аеропорт у Франції все ще використовує win3.1
Джон Деметріу

3
@GavinWilliams Гаразд, де ваша статистика, що ставить Windows 10 на помітну частку ринку в будь-якому сегменті ринку? Ви кажете, що модники видалили ваш коментар із посиланням на ваше джерело, але вони дозволяють вам виставити цей коментар? Я не купую це. Я згоден з тим, що XP не варто підтримувати, але універсальні програми для Windows 10 навіть не підтримують Windows 8.1, не кажучи вже про Windows 7. Застосування ніде не повинно бути, щоб виправдати універсальність Windows, і це сповільнюється .
Джон Коландуні

3
@GavinWilliams Гаразд, давайте ігноруємо, що 30% - це набагато менше 97% (підтримка, яку ви отримали, якби використовували WPF), і що ці дані корисні лише програмістам відеоігор. Для відеоігор досить легко орієнтуватися на обидва; якщо ви не робите чогось справді тривіального, ви захочете використовувати DirectX / OpenGL, а це означає, що вам просто потрібно розмістити його у вікні / повноекранному режимі. Якщо ви не хочете їх використовувати, ви дійсно захочете WPF, оскільки інтерфейс WinRT не дозволяє малювати в негайному режимі без розміщених DirectX / OpenGL (як це робить WPF). Отже, що щодо WinRT виправдовує зменшення розміру ринку на 70%?
Джон Коландуоні,

1

Я стикаюся з цим питанням якихось рік тому. Я дійшов висновку, що XAML, WPF і WinRT - це правильне середовище для розвитку.

Я дуже рекомендую використовувати .Net Framework для рівня даних (включаючи веб-служби та рівень RESTful (JSON)) та чистий HTML5 / CSS3 та Javascript для рівня веб-презентації.

У Windows 10 ви можете інтегрувати будь-яку веб-програму як програму метро прямо з коробки.

WinRT, XAML, WPF та подібні файли ms працюють лише у вікнах і мають багато обмежень.

Тож через рік я все ще дуже радий своєму рішенню не використовувати WinRT або XAML для свого нового проекту.


3
Про що ти говориш? Так, це чудовий вибір, якщо ви хочете створити веб-програму. Якщо ви хочете зробити настільний додаток, це не так. Ви можете використовувати Katana та мати локальний WebApi та зробити додаток для настільних ПК, що, мабуть, зробить цю відповідь більш актуальною.
Кейсі

1
ОП запитали про інтерфейс Windows GUI та WPF або Winrt - не про веб-додатки.
ezaspi

6
Крім того, мені особисто набагато складніше працювати з цими технологіями (незрозуміла система компонування, відсутність перевірки часу компіляції коду тощо) Робочий стіл ще не вмер :)
BradleyDotNET,

1
Я погоджуюсь, що HTML є універсальним інтерфейсом і повинен бути для робочого столу. Я відчуваю, що нам потрібно спростити всі ці різні рамки і перестати вводити все більше і більше, і все більше і більше. Більшість з них не потрібно. Просто вивчіть HTML та ASP, а потім самостійно розмістіть свій веб-сайт у програмі WinForm. Додаток WinForm містить ваш веб-сервер та веб-браузер. Результат полягає в тому, що ви економите час, зосереджуєтесь на оволодінні однією мовою та технологіями, швидше розробляєте, заощаджуєте гроші своїм клієнтам, ваші програми надійні та надійніші у майбутньому.
TheLegendaryCopyCoder
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.