WPF или Windows Forms
Я играю с консольными приложениями C# около года, и я хочу перейти к созданию приложений GUI. Я никогда не занимался разработкой GUI, кроме основных приложений Java, но я хочу продолжать использовать C#. Должен ли я начать изучать Windows Forms или перейти прямо к WPF? Есть ли огромная разница? Строится ли WPF поверх Windows Forms или они совершенно разные?
4 ответов
Если вы только начинаете, прыгайте прямо в WPF.
Это позволит вам начать создавать богатые интерфейсы, используя разметку, чтобы определить свой интерфейс, не обучая вас возможным плохим привычкам (для WPF), которые вы узнаете из Windows Forms.
эти две совершенно разные технологии. Они предлагают некоторые уровни совместимости для обоих направлений, но кроме этого не имеют ничего общего. Windows Forms-это более или менее легкая оболочка поверх в Win32/MFC, что означает, что его расширяемость в .NET не так хороша во всех случаях. WPF-это новая платформа пользовательского интерфейса, реализованная с нуля. WPF также гораздо более гибок, когда дело доходит до настройки существующих типов.
, в по крайней мере, по моему опыту, Windows Forms, похоже, является наиболее часто используемой платформой пользовательского интерфейса рабочего стола в отрасли. Windows Forms нельзя использовать с веб-разработкой, хотя WPF предлагает приложения Silverlight и XBAP.
Если вы делали какие-либо разработки пользовательского интерфейса раньше, я бы осмелился сказать, что Windows Forms легче узнать, поскольку он следует более традиционным парадигмам программирования. Модель программирования WPF сильно отличается от этой. Хотя WPF можно использовать так же, как Windows Forms, большинство его преимуществ не достигается, пока вы не охватите привязку данных и инкапсуляцию, предоставляемые WPF.
несмотря на то, что некоторые моменты в пользу Windows Forms выбор WPF над Windows Forms будет для меня без проблем, если все, что вы хотите сделать, это изучить UI framework. Он превосходит Windows Forms во всех аспектах. Я просто хочу, чтобы индустрия программного обеспечения в целом адаптировала его в большем масштабе! (Хотя никто не пишет настольных приложений, т. к. у нас сеть.)
обе технологии имеют свои плюсы и минусы.
WPF лучше для кросс-платформенной разработки и создания «кричащих» GUI. Однако для этого требуется более новая .net framework, чем WinForms, и требуется совместимый с dx9 GPU или выше (который будет иметь большинство людей).
но это немного больше, чтобы создать интерфейс / подключить все события и т. д.
WinForms по-прежнему является мощной технологией, которая часто может быть разработана более быстрыми темпами, чем WPF однако, в конце концов,обе технологии могут быть использованы для достижения той же цели. однако WPF является «новым» стандартом.
приложения WinForms широко используются для разработки бизнес-приложений, в то время как в WPF часто используется для создания более конечных пользователей на основе битов программного обеспечения, приложений и т. д.
WPF предоставляет очень богатые возможности для создания чрезвычайно сложных пользовательских интерфейсов. Это упрощает интеграцию аппаратно-ускоренной графики в интерфейсе. Однако дизайнер Visual Studio WPF действительно плох (я почти никогда не использую его). Я также думаю, что WPF намного сложнее, и с этого сложнее начать. Но это, конечно, субъективно.
Что изучать: WinForms или WPF?
Вот скажите, как это понимать, когда я только начал читать книги, мне писали «Начинайте с консольных приложений». Потом когда я прошёл этот курс, в другой книге уже начали говорить о WinForms, и сейчас я начал читать другую книгу, там автор вообще пишет:
Зачем писать под WinForms, ведь её элементы почти не менялись за последние 10 лет, учите лучше WPF
Я сейчас вообще как ёжик в тумане. Что учить? На чём остановиться? Что ждёт дальше? Может быть, я поучу WPF, а в другой книге уже будут говорить о новом более красочном написании приложений? Можете помочь распутаться и всё расставить по полочкам. пожалуйста.
4 ответа 4
Если Вас интересует программирование desktop-приложений под Windows, то лучше остановиться на WPF, так как:
- это просто самая новая технология на данный момент
- использует 3D-ускоритель для отрисовки интерфейса
- ну и готовых возможностей по «украшению» интерфейса здесь гораздо больше
Хотя, если Вы будете использовать WinForms, приложения будут также отлично работать, так что выбор за Вами.
Насчёт того что ждёт дальше, то до выхода Windows 8 нкаких изменений не планируется. Но как обещают в Microsoft, после её выхода появится возможность разрабатывать интерфейс desktop-приложений используя HTML+CSS+JS.
Да, смотря что ты хочешь создавать. WPF больше подходит для крутых компов, где стоит минимум XP, с .NET 3.0. Библиотека тяжелая, но в Windows Vista уже стоит по умолчанию. Но за эти неудобства WPF дает хорошие преимущества почти во всем, но только на Windows. WindowsForms проектировать можно и даже предпочтительнее, у него есть следующие преимущества над WPF (сколько помню, столько и напишу)
- SDI и MDI приложения (хотя есть библиотеки для эмуляции)
- легче организовывать интерфейс OpenGL, DirectX
- Теоретически кроссплатформенно за счет наличия MONO Framework
- GDI+ легче в обращении (но медленнее), чем накрученная render-система в WPF
- Вопреки распространённому заблуждению, поддерживают и полупрозрачные окна
Если нужны более глобальные сведения по выводу любых изображений, мне кажется, надо изучать DirectX и OpenGL. Если же надо попроще, то тогда WPF. Рад, если помогу определиться.
Лично я (правда, вместе с Microsoft) порекомендую приступать к изучению UWP, Universal Windows Platform. Microsoft усиленно (но, к сожалению, не слишком то эффективно) проталкивает эту технологию, и, судя по всему, будет проталкивать ее еще определенное время, пока в очередной раз не сменится top management.
Опять-таки, программирование для WPF и UWP имеет много общего, так, что освоив UWP, вы без особого труда сможете писать и стандартные Windows приложения, а не только совместимые с Microsoft Store.
Кроме того, умение программировать UWP приложения привлекательно еще в чисто практическом смысле: освоив это, вы сможете опубликовать свое приложение в магазине, и сделать его доступным (потенциально) сотням миллионов пользователей. Не факт, конечно, что ваше приложение будет пользоваться хоть каким-то успехом, но уж несколько сотен закачек получите по любому. А работа с реальным проектом, и реальной отдачей — это лучшая практика для начинающего программиста, на порядки полезнее выполнения «стандартных» упражнений из учебника, уж поверьте мне на слово!
Почему все пишут приложения на WinForms если WPF лучше? [закрыт]
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.
Закрыт 3 года назад .
Очень часто на этом форуме встречаются вопросы которые начинаются таким образом
Я лично пробовал писать на Win Form и на WPF, и, как мне показалось, WPF более точный, более красивый в плане дизайна UI элементов. К тому же, в комплекте в WPF идёт замечательнейший язык Xaml, с которым работать намного легче чем с C# кодом внутри WinForms.
В связи с этим и задаюсь вопросом: какие преимущества есть у Win Form перед WPF и почему многие пишут на Win Form, хотя у них устарелый дизайн и они не поддерживаются?
4 ответа 4
У WPF и правда масса преимуществ перед WinForms. Особенно серьёзным преимуществом я бы назвал понятие привязки ( Binding ) и DataContext , которые радикально облегчают написание правильно структурированных программ, в которых представление отделено от модели, бизнес-логики и контента.
(Не то, чтобы на WinForms невозможно было писать правильно, это намного сложнее, и требует ручной работы.)
Но следствием этого и обратной стороной является гораздо более высокая сложность WPF как фреймворка, намного более высокий порог вхождения в WPF и в правильные методики программирования на нём. Ведь сила WPF проявляется именно когда вы начинаете отделять контент от представления, без этого он ненамного лучше WinForms.
Тем, у кого есть опыт программирования на MFC или похожих UI-фреймворках, намного легче перейти на практически аналогичный WinForms, чем учить новые (хотя бы и более удобные и продуктивные) концепции, которые помогают лёгкому, удобному программированию на WPF.
Думаю, именно это является основной причиной того, что WinForms всё ещё существует.
Не знаю как другие, но лично я не помню тот момент когда последний раз использовал WinForms, если десктоп — лишь только WPF и как бы высокопарно это не звучало, в этой среде он до сих пор впереди планеты всей. При этом не важно, это кровавый enterprise или приложение с «бабочками и цветочками».
- Декларативное программирование, web подобная модель компоновки.
- Независимость от разрешающей способности, аппаратное ускорение, поддержка мультисенсорного ввода.
- Стили, триггеры, шаблоны, анимация, аудио и видео, команды, мощная система привязки, маршрутизируемые события.
- Продвинутые возможности для рисования.
- Приложения со страничной организацией.
и куча всего. Кроме того идеи, принципы и философия, которые положены в основу данной технологии, мне очень импонируют, близки и симпатичны. При этом я не являюсь каким-то ярым противником WinForms или фанатиком WPF, но просто если на секунду вдуматься и поразмыслить чего бы стоило сделать на «формах» то что в WPF реализуется минут за 5 или 10, невольно понимаешь всю мощь и те возможности, которые эта технология предоставляет.
При этом как все мирское, WPF не идеальна и не лишена недостатков, но просто плюсов все-равно больше и это факт.
Скорее всего, это новички, которые только начинают учить .NET. Естественно, они начинают с более простой в изучении WinForms. И им не важно, что там что-то устарело, не поддерживается и т. д. Их цель — научиться писать программы.
По поводу устарелого дизайна, я вас не понял.
По поводу поддержки Win Forms мне кажется она никуда не делась, в этом можно убедиться почитав новости про Visual Studio 2017 и .net 4.7.
Лично мои наблюдения:
WPF говорит от потрясающем быстродействии в отрисовке элементов на экране благодаря работе на DirectX. У меня комп прекрасен всем — и CPU и GPU, но, по факту, отрисовка на экране у Win Forms гораздо быстрее (GDI тоже на месте не стоит).
Контрол DataGrid на WPF крайне сырой(по крайней мере пару лет назад был). Это самый важный контрол для представления данных вообще. Он должен быть очень универсальным, именно такой он в Win Forms, но не в WPF. Для виртуализации данных в DataGrid (WPF) можно использовать только виртуализацию самого источника данных через DataSource.
В Win Forms с DataGridView можно делать буквально все, что только угодно благодаря старому доброму механизму событий(CellVlueNeeded и CellValueFormating), причем очень просто (ну и DataSource тоже на месте).
Кстати, может кто то подскажет, появился способ в DataGrid поставить програмно фокус в строку номер N не прибегая к коду в 30 строк с применением рефлексии?
На мой скромный взгляд WPF хорош для приложений где летающие и пархающие кнопочки в виде звездочек важнее всего остального.
Для бизнес-приложений важно как раз все остальное, эти приложения люди используют долгое время, по многу часов в день. Функционал их сложен и, как правило, нестандартен. Поэтому их интерфейс должен быть максимально функциональным и не оттягивать внимание на самого себя. Человек не должен уставать от пестрого и мультяшного интерфейса.
В пользу WPF скажу только, что сам принцип построения интерфейса в нем очень интересен тем, что похож на таковой в интернет-страницах. Это очень интересно, но пока сыро (до сих пор! Когда был впервые представлен WPF!?). И да, я не обожаю XAML.