it-swarm.com.ru

Windows GUI: WPF или WinRT (2015+)

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

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

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

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

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

Как Windows 8 Runtime (WinRT/приложения Магазина Windows/универсальное приложение Windows 10) сравнивается с Silverlight и WPF?

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

Мой реальный вопрос: не существует ли ОДИН хороший способ для создания GUI в мире окон?

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

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

Как вы думаете, это правильная вещь, чтобы инвестировать время?

93
Alf Nielsen

Здесь много, но здесь идет:

  • 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, похоже, уходит от контента, созданного сообществом для платформы. Тем не менее, Unity может развертываться на XBox, и я считаю, что стандартная разработка DirectX (C++) работает для него. Универсальные приложения Windows Platform также могут быть развернуты на Xbox One, и это, похоже, стратегия Microsoft на будущее.

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

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

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

132
BradleyDotNET

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

Во-первых, больше не следует начинать с Windows Forms. На данный момент это самая зрелая технология, но дальнейшая разработка Windows Forms не будет, она сейчас только на стадии обслуживания. WPF активно развивается (последнее, что я читал). Но теперь универсальные приложения Windows (WinRT one) больше не нужно использовать в полноэкранном режиме, и их можно использовать в оконном режиме, как и другие настольные приложения (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 будет правильным выбором.

На ваш вопрос "какие технологии следует использовать на Окно 7Window 8 (Desktop и Metro), Window Phone (и Windows 10!) И даже X-Box. "Единственный ответ - Windows Universal Apps. Именно по этой причине была разработана эта структура. Одна технология, которая будет использоваться разрабатывать приложения для всех устройств: настольных компьютеров, планшетов, телефонов (включая Android с использованием Xamarin в комплекте с Visual Studio 2015), Xbox и IoT (Internet of Things).

26
Prateek Jain

Я постараюсь ответить только на один ваш вопрос:

Windows Forms полностью мертва?

Нет, технология форм Windows не умерла. Я скажу тебе почему. WPF и XAML - это очень комплексная и сложная технология, и вы можете создать очень приятный интерфейс. Но! Эта технология требует глубоких знаний. Для базовых макетов вам не нужно много знаний, но для некоторых расширенных макетов вы должны обладать глубокими знаниями, и когда я начал работать с этой технологией и потратил много времени на поиск некоторых советов в Google. Поэтому, когда мне нужны простые формы для ввода данных пользователем, я всегда выбираю технологию Windows Forms, которая очень проста и понятна. Это также причина, почему эта технология была очень успешной, когда пришла в мир. Когда вы начинаете с WPF, вам также необходимо знать, что такое шаблон проектирования MVVM, и некоторые неопытные программисты с этим не согласны.

22
Tomáš Opis

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

16
Gareth

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

Лично я считаю, что бизнес-модель UWP в песочнице (зыбучие пески?) Ужасна; это противостоит открытости, которой Windows отстаивала с самого начала.

5
Jeroen S

Это старый поток, но важный с текущим прогрессом в .NET Framework, особенностях c # и повышенным вниманием к c # как выбору для разработки игр.

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

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

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

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

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

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

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

4
Mike Johnson

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

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

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

3
Gavin Williams

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

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

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

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

2
Jason Ching

Я столкнулся с этим вопросом около года назад. Я пришел к выводу, что XAML, WPF или WinRT - правильная среда разработки для начала.

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

В Windows 10 вы можете интегрировать любое веб-приложение в виде приложения метро прямо из коробки.

WinRT, XAML, WPF и другие подобные файлы MS работают только на Windows и имеют множество ограничений.

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

1
Khamis