Графический интерфейс Windows: WPF или WinRT (2015+)
Я пытаюсь получить обзор различных технологий,
чтобы использовать при создании GUI в мире Windows.
для контекста, я строю немного 2d платформы многопользовательской игры.
(Только для целей обучения..)
мой учитель говорит, что он думает, что WPF-это правильный путь,
но похоже, что он только сравнивает его с Windows Forms.
мое понимание заключается в том, что здесь, в 2015 году, Windows Forms полностью мертв?
в этом другом stackover вопросы, они говорят WinRT + XAML для Metro GUI building (Window 8 tiles thing!), и кажется, что WPF-это то, что используется только для рабочего стола в окне 7/8 и близко связано с Silverlight..
Как среда выполнения Windows 8 (WinRT / Windows Store apps / Windows 10 Universal App) сравнивается с Silverlight и WPF?
- рабочий стол, где живут старые приложения (красный. МИРОВАЯ ПРОДОВОЛЬСТВЕННАЯ ПРОГРАММА.)
- новый класс приложений, приложений метро, может быть построен в ряде случаев,
в том числе и за счет VB.NET, C# или C++. Эти три варианта языка можно использовать
XAML для построения пользовательского интерфейса. Альтернативой является использование
JavaScript / HTML5 / CSS для разработки как пользовательского интерфейса, так и
код приложения.
мой реальный вопрос:
Разве нет одного хорошего способа построить GUI в мире окон?
а если нет, то какие технологии следует использовать в Window 7, Window 8 (Desktop и Metro), Window Phone (и Windows 10!), и даже x-коробка..
можно ли сравнивать таким образом различные технологии?
Как вы думаете, что это правильная вещь, чтобы инвестировать время?
9 ответов:
здесь много, но здесь идет:
- Это Windows Forms (Winforms) умерла? Нет. Его до сих пор активно поддерживают. Тем не менее, это ужасно технология для работы (по крайней мере, когда вы знаете магию WPF)
- Если вы хотите построить красивый, хорошо спроектированный рабочий стол (классического, а не Метро) приложения, WPF-это ответ в чистом виде .Чистом выражении. Ты можете используйте 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, похоже, уходит от контента, созданного сообществом для платформы. Тем не менее, Unity может развертываться на XBox, и я поверьте, что стандартная разработка DirectX (C++) работает для него. Универсальные приложения для платформы Windows также могут быть развернуты на Xbox One, и это, похоже, стратегия Microsoft в будущем.
Что касается того, на что тратить время, это зависит от того, на что вы нацелены :). Изучение WPF / UWP + XAML даст вам много преимуществ, если вы хотите оставаться "текущим" в разработке графического интерфейса .NET, поэтому я бы пошел на это. WPF имеет большинство функций, поэтому, начав там, вам просто нужно найти обходные пути для того, что отсутствует в UWP (или любой другой технологии на основе XAML).
Если вы это сделаете, обязательно изучите шаблон MVVM (Model-View-View Model). Это работает действительно хорошо с технологиями на основе XAML, и позволяет совместно использовать много логики между приложениями WPF и UWP. Та же логика может также использоваться, если вы в конечном итоге разрабатываете приложения Xamarin для iOS/Android и т. д.
обратите внимание, что для правда разработка игр, вы хотите Ан фактический рамки игры (например, Unity3D или даже XNA). Вы можете сделать это в WPF, и это лучший выбор, чем Winforms, но ни один из них не предназначен для игр.
Это довольно старая тема, но, как я столкнулся с этим через 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 сам.
Я постараюсь ответить только на один ваш вопрос:
является ли Windows Forms полностью мертв?
нет, технология Windows forms не мертва. Я скажу вам, почему. WPF и XAML-это очень комплексная и сложная технология, и вы можете создать очень хороший пользовательский интерфейс. Но! Эта технология требует глубоких знаний. Для базовых макетов вам не нужно так много знаний, но для некоторых продвинутых макетов вы должны иметь глубокие знания, и когда я начал с этой технологии и потратил много времени на поиск некоторых советов в google. Поэтому, когда мне нужны некоторые простые формы для пользовательского ввода, я всегда выбираю технологию Windows Forms, которая очень проста и понятна. Это также причина, почему эта технология была очень успешной, когда пришла в мир. Когда вы начинаете с WPF, вам также нужно знать, что такое шаблон проектирования MVVM, и некоторые неопытные программисты путаются с этим.
сейчас апрель 2016 года, и до сих пор нет четкого ответа на этот вопрос. Мы разрабатываем очень современное настольное приложение для мониторинга производительности в реальном времени, которое должно отображать несколько диаграмм и дисплеев, смешанных с текстом и различными другими графиками. Наше приложение-C#, WPF с .NET Framework 4.5.2, но мы все еще пишем некоторые компоненты с использованием WinForms и GDI+, чтобы получить приемлемую производительность. Мы просто не достигли этого с WPF. Мы даже разработали несколько дисплеев в приложение с DirectX, но это добавляет много сложности, что только некоторые из команды могут поддерживать. Простота и чистая скорость, которую мы можем получить от размещения дисплея WinForms в WPF, а скорость GDI+ дает нам то, что нам нужно в дорогостоящей структуре pure View/ViewModel, а также приходится иметь дело с различными проблемами воздушного пространства. Наше приложение довольно специалист, и я хотел бы избавиться от WinForms в целом, но, к сожалению, это просто еще не возможно в нашем случае. Для чистого производительность вам нужно будет перейти либо на DirectX, либо на WinForms.
мои два цента... если вы хотите настоящие универсальные приложения, то есть программы, которые могут работать на любой настольной операционной системе, включая Windows, WinForms-это все еще путь. Просто убедитесь, что вы остаетесь совместимым с CLR, и вы можете развернуть на Mac и Linux через Mono. Огромная выгода. XAML может быть классным, но он не будет портирован на другие операционные системы.
Я лично нахожу песочницу (зыбучие?) Бизнес-модель UWP ужасает; она противостоит открытости, которую выдержала Windows ибо с самого начала.
Это старый поток, но важный с текущим прогрессом .NET framework, функциями c# и повышенным вниманием к c# как выбору разработки игр.
WPF почти никогда не выбирается в качестве игровой платформы c# со всей честностью. Проблемы с воздушным пространством WPF отпугнули людей довольно быстро. Я не думаю, что многие (если таковые имеются) основные названия или основные игровые движки потока поддерживают WPF в качестве целевой платформы либо из-за этого. WPF делает для большой платформы для запуска игр хотя!
WinForms, в то время как теперь в режиме обслуживания, по-прежнему будет действительным выбором на долгие годы. Это проверено временем и стабильно. Из того, что я видел, даже в 2017 году WinForms по-прежнему является самой распространенной платформой, выбранной для разработки игр на основе c#.
смотрим данные обследования оборудования Steam вы можете видеть, что на момент написания этого ответа (июль 2017), Windows 10 64-бит теперь доминирует на игровой платформе ПК с долей рынка 50%, а затем Windows 7 64-разрядная на 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 или игрового движка на самом деле поддерживает лучше всего.
WinRT был на рабочем столе в течение длительного времени, я пишу WinRT, который работает на моем deskop. И в Windows 10 эти приложения будут поддерживать не закрепленные местоположения (оконные, как вы их традиционно знаете).
Я бы не рекомендовал WinForms или WPF кому-либо начинать сегодня. Они должны изучать WinRT / XAML в первую очередь. И изучите некоторые Win32 / .net, как им это нужно, в зависимости от их языка выбора..
" Они говорят, что WinRT + XAML для графического интерфейса Metro здание (окно 8 плитки вещь!) "- Это такая более-абстракция, что это бесполезно. WinRT-это среда выполнения, как Win32, это не только для GUI, так что "они говорят" - это полная BS. XAML-это слой пользовательского интерфейса (так же, как XAML в WPF), но сказать, что это Metro GUI, также неправильно, больше нет такой вещи, как Metro GUI. XAML-это слой пользовательского интерфейса Windows. И " Windows 8 плитка вещь!"является выразительным для некоторых народов туннельное зрение. Это было бы похоже на то, что я говорю, что Win32-это меню "Пуск". Вы можете видеть, как смешно это утверждение.
Я работаю с технологиями Microsoft более 10 лет. Самое главное, я научилась не просто слушать то, что Microsoft предлагает вам. Когда Microsoft говорит этой это будущее, оно имеет 50% шанс пойти не так. Microsoft наверняка сделает все возможное, чтобы продвигать продукты, в которые они инвестировали, но это не значит, что вы должны следовать. Посмотрите, что происходит с WCF и Silverlight.
хотя WPF очень хороший платформа для обучения, она имеет огромную кривую обучения. Я не думаю, что любой разработчик с менее чем 5-летним опытом программирования может сделать WPF правильно.
следуя шаблону MVVM, вы обнаружите, что делать что-то относительно простое в WinForm может стать очень сложным в WPF. Как цвет ячейки на основе некоторого условия после обновления, или прокрутите строку в представлении и высветите ее.
конечно, вы можете сказать, что вам не нужно делать MVVM. Просто поместите свой код в код сзади и заставить его работать. Да, это будет работать, но какой смысл использовать WPF? Почему бы просто не использовать форму Win?
Я столкнулся с этим вопросом около года назад. Я пришел к выводу, что wether XAML, WPF или WinRT-это правильная среда разработки для начала.
Я настоятельно рекомендую использовать .Net Framework для уровня данных (включая веб-службы и RESTful layer (JSON) ) и чистый HTML5/CSS3 и Javascript для вашего уровня веб-презентации.
в Windows 10 вы можете интегрировать любое веб-приложение в качестве приложения metro просто из коробки.
WinRT, XAML, WPF и подобные ms вещи работают только в windows и имеют много ограничений.
поэтому через год я все еще очень рад своему решению не использовать WinRT или XAML для моего нового проекта.
Comments