Графический интерфейс Windows: WPF или WinRT (2015+)

94

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

Для контекста я создаю небольшую многопользовательскую 2D платформенную игру. (Просто для обучения ..)

Мой учитель говорит, что он думает, что WPF - правильный путь, но, похоже, он сравнивает его только с Windows Forms.

Я понимаю, что здесь, в 2015 году, Windows Forms полностью мертва?

В этих других вопросах наложения они говорят, что WinRT + XAML предназначен для построения графического интерфейса Metro (штука с плитками Window 8!), И кажется, что WPF используется только для рабочего стола в Window 7/8 и близок к Silverlight ..

Чем отличается среда выполнения Windows 8 (приложения WinRT / Windows Store / универсальное приложение Windows 10) с Silverlight и WPF?

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

Мой настоящий вопрос: нет ли ОДНОГО хорошего способа создания графического интерфейса в Window World?

А если нет, то какие технологии следует использовать в Window 7, Window 8 (Desktop и Metro), Window Phone (и Windows 10!) И даже x-box ..

Можно ли так сравнивать разные технологии?

Как вы думаете, на что нужно тратить время?

Альф Нильсен
источник
5
«WPF или WinRT?». Изучите оба: WPF для настольных ПК и среду выполнения Windows для мобильных устройств. Эти технологии имеют много общего, например XAML и очень похожую структуру. Вы даже можете написать код, поддерживающий обе платформы, в виде переносимых библиотек классов.
Клеменс,
2
@Clemens Последний бит немного вводит в заблуждение. Стандартные библиотеки .NET должны быть перестроены / нацелены на работу с приложениями WinRT, что может потребовать изменения кода для определенных классов.
BradleyDotNET,
3
Windows Forms не совсем мертва, но вы, вероятно, не захотите использовать ее, если еще не знакомы с ней.
Кейси,
2
На мой взгляд, ваша цель - «оставаться в курсе последних событий в графическом интерфейсе Windows». У среднестатистического разработчика в долгосрочной перспективе мало будущего. MS меняла свои инструменты для графического интерфейса очень много раз, в то время как JavaScript и HTML5 продолжали набирать популярность. Если вы занимаетесь разработкой, забудьте обо всем остальном. Несколько исключений из этого, если вы работаете на MS или стороннего поставщика графического интерфейса или желаете придерживаться старого кода.
NoChance
3
Даже MFC не совсем мертв, и Win32 тоже. Но MFC для игр - это то, что выберут безумцы
Лотар

Ответы:

132

Здесь много всего, но вот что:

  • Windows Forms (Winforms) мертва ? Нет. Его все еще активно поддерживают. Тем не менее, это ужасная технология для работы (по крайней мере, если вы знаете магию WPF)
  • Если вы хотите создать красивое, хорошо спроектированное настольное приложение (классическое, а не Metro), WPF - это ответ на чистом .NET. Вы можете использовать WinRT API (например, их классы сокетов), но вы не можете запускать их в ОС до 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, и, похоже, это стратегия Microsoft на будущее.

Что касается того, на что потратить время, это зависит от того, на что вы ориентируетесь :). Изучение WPF / UWP + XAML принесет вам много преимуществ, если вы хотите оставаться «актуальным» в разработке графического пользовательского интерфейса для .NET, поэтому я бы пошел именно на это. WPF имеет наибольшее количество функций, поэтому, начав с него, вам просто нужно найти обходные пути для того, чего не хватает в UWP (или любой другой технологии на основе XAML).

Если вы это сделаете, обязательно изучите шаблон MVVM (модель-представление-представление). Он действительно хорошо работает с технологиями на основе XAML и позволяет разделять большую часть логики между приложениями WPF и UWP. Эту же логику можно использовать, если вы в конечном итоге будете разрабатывать приложения Xamarin для iOS / Android и т. Д.

Обратите внимание, что для настоящей разработки игр вам понадобится настоящая игровая среда (например, Unity3D или даже XNA). Вы можете сделать это в WPF, и это лучший выбор, чем Winforms, но ни один из них не предназначен для игр.

BradleyDotNET
источник
Спасибо за ответ, у меня моя мини-игра началась с 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 станет лучшим вариантом.

На ваш вопрос, «какие технологии следует использовать в Window 7 , Window 8 (Desktop и Metro), Window Phone (и Windows 10!) И даже x-box.», Единственный ответ - универсальные приложения Windows. Именно по этой причине была разработана данная структура. Одна технология, которая будет использоваться для разработки приложений для всех устройств. Настольный компьютер, планшет, телефоны (включая Android с использованием Xamarin в комплекте с Visual Studio 2015), Xbox и IoT (Интернет вещей).

Пратик Джайн
источник
19
Универсальные приложения, похоже, не работают в Windows7 или Windows8. «Универсальные приложения» являются «универсальными» только для устройств Win10.
Dragontamer5788,
Xamarin по-прежнему является самостоятельным продуктом (без универсальных приложений), и я не уверен, что они могут быть развернуты на Xbox.
BradleyDotNET
2
@PrateekJain: НЕТ при запуске приложений UWP в Windows 8: stackoverflow.com/a/30317960/199364
ToolmakerSteve
6
WinForms по-прежнему отлично подходит для быстрых и грязных графических интерфейсов - WPF хорош, но требует большого количества шаблонного кода (и крутой кривой обучения) для «правильного» использования даже без MVVM. Отстойно, что WPF не обладает настоящими возможностями RAD - а XAML чертовски многословен .
Дай
1
Для всех устройств моей жопы. Это Microsoft снова говорит в лучшем виде. Точно так же, как в старые времена, когда они называли это кроссплатформенным, потому что он работал на 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, но на самом деле использование привязки без какой-либо инфраструктуры MVVM также легко для простых приложений. WPF технологически ближе к WinRT и UWP, поэтому, пожалуйста, ради себя, предположите, что Windows Forms мертва ни для чего другого, кроме поддержки устаревших приложений.
тоже
3
Winforms отлично подходит для создания "консольных" приложений нового века. Например, чрезвычайно простой элемент управления вкладками с кучей кнопок и пользовательским вводом, который эффективно накладывает скин на то, что обычно является консольным приложением.
прокатывает
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 01
1
После WinRT я решил поискать в другом месте. Мои клиенты и я не можем слишком полагаться на то, что хочет Microsoft, поскольку это влияет на мою прибыль и прибыль моих клиентов. Теперь я смотрю на самообслуживаемое приложение, которое использует локальный веб-сервер для локального обслуживания страниц приложения для браузера пользователя или встроенного элемента управления браузером в приложении WinForm / WPF. Это упрощает разработку, приближает меня к кроссплатформенной совместимости и, очевидно, снижает затраты.
TheLegendaryCopyCoder
6

Мои два цента ... если вам нужны настоящие универсальные приложения, то есть программы, которые могут работать в ЛЮБОЙ настольной операционной системе, включая Windows, WinForms - это то, что вам нужно. Просто убедитесь, что вы остаетесь совместимым с CLR, и вы можете развернуть его на Mac и Linux через Mono. Огромная выгода. XAML может быть крутым, но он не будет перенесен на другие операционные системы.

Я лично считаю изолированную (рваную?) Бизнес-модель UWP ужасающей; он противостоит открытости, которую Windows отстаивала с самого начала.

Jeroen S
источник
4

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

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

Следуя шаблону MVVM, вы обнаружите, что выполнение чего-то относительно простого в WinForm может стать очень сложным в WPF. Например, раскрасьте ячейку на основе некоторого условия после обновления или прокрутите строку в представлении и выделите ее.

Конечно, вы можете сказать, что вам не нужно делать MVVM. Просто вставьте свой код в код и заставьте его работать. Да, это сработает, но какой смысл использовать WPF? Почему бы просто не использовать форму выигрыша?

Джейсон Чинг
источник
1
Я согласен с тем, что WPF требует интенсивного обучения, но как только вы это преодолеете, возврата к WinForms просто не будет ... никогда.
Krythic
4

Это старый поток, но он важен с учетом текущего прогресса .NET framework, функций C # и повышенного внимания к C # как варианту разработки игр.

Честно говоря, WPF почти никогда не выбирают в качестве игровой платформы на C #. Проблемы с воздушным пространством WPF довольно быстро напугали людей. Я не думаю, что многие (если таковые имеются) основные игры или игровые движки основного потока поддерживают WPF в качестве целевой платформы либо из-за этого. Однако WPF - отличная платформа для запуска игр!

WinForms, находящийся сейчас в режиме обслуживания, по-прежнему будет правильным выбором на долгие годы. Проверено временем и стабильно. Судя по тому, что я видел, даже в 2017 году WinForms по-прежнему остается наиболее распространенной платформой, выбранной для разработки игр на основе C #.

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

Учитывая текущее состояние компьютерных игр, WinForms является наиболее распространенным знаменателем для всех трех ведущих платформ ПК. Заглядывая в будущее, UWP станет лучшей целевой платформой для разработки игр на C #, поскольку Windows 7 и 8 теряют значительную долю рынка в пользу Windows 10, если не появится новая платформа, которая ее заменит. Так что это только цифры.

Если выбрать на основе наилучшего уровня совместимости для каждой платформы ОС вместо поддержки максимальной доли рынка, варианты будут больше похожи на:

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

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

Майк Джонсон
источник
Хотя иметь точку зрения на разработку игр - это интересно, я не понимаю, почему вы выбрали среду графического интерфейса для разработки игр, в которой у вас есть полнофункциональный игровой движок для C #, такой как Unity. Лишь несколько игр, которые я видел с классическим графическим интерфейсом, были для выпуска данных игры (например, редактирование карты / ресурсов)
Uwy
2
По той же причине, по которой они выбирают игровой движок: довольно сложно создать собственное окно и эффективно управлять им из управляемого кода самостоятельно.
Майк Джонсон
3

WinRT уже давно используется на рабочем столе, я пишу WinRT, который работает на моем компьютере. А в Windows 10 эти приложения будут поддерживать не пристыкованные местоположения (оконные, как вы их обычно знаете).

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

«они говорят, что WinRT + XAML предназначен для создания графического интерфейса Metro (штука с тайлами Window 8!)» - это настолько чрезмерная абстракция, что она бесполезна. WinRT - это среда выполнения, как и Win32, она не только для графического интерфейса, так что то, что «они говорят», является полной ерундой. XAML - это уровень пользовательского интерфейса (очень похожий на XAML в WPF), но говорить, что это Metro GUI, тоже неверно, такой вещи, как Metro GUI, больше нет. 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 работают только в Windows и имеют множество ограничений.

Итак, по прошествии года я все еще очень рад своему решению не использовать WinRT или XAML для моего нового проекта.

Хамис
источник
3
О чем ты говоришь? Да, это отличный выбор, если вы хотите создать веб-приложение. Если вы хотите создать настольное приложение, это не так. Вы можете использовать Katana, иметь локальный WebApi и создать настольное приложение, что, я думаю, сделает этот ответ более актуальным.
Кейси
1
OP спросил о графическом интерфейсе Windows и WPF или Winrt, а не о веб-приложениях.
ezaspi
6
Кроме того, я лично считаю, что с этими технологиями намного труднее работать (непонятная система компоновки, отсутствие проверок кода во время компиляции и т. Д.). Рабочий стол еще не мертв :)
BradleyDotNET 02
1
Я согласен, HTML - это универсальный пользовательский интерфейс, и он должен подходить и для настольных компьютеров. Я чувствую, что нам нужно упростить все эти различные фреймворки и перестать вводить все больше и больше и больше. Больше в этом нет необходимости. Просто изучите HTML и ASP, а затем самостоятельно разместите свой сайт в приложении WinForm. Приложение WinForm содержит элементы управления вашим веб-сервером и веб-браузером. В результате вы экономите время, вы сосредотачиваетесь на освоении одного языка и технологии, вы быстрее разрабатываете, вы экономите деньги своих клиентов, ваши приложения ориентированы на будущее и намного более портативны.
TheLegendaryCopyCoder