Wpf и windows forms отличия

Обновлено: 04.07.2024

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.

Закрыт 4 года назад .

Очень часто на этом форуме встречаются вопросы которые начинаются таким образом

В связи с этим и задаюсь вопросом: какие преимущества есть у Win Form перед WPF и почему многие пишут на Win Form, хотя у них устарелый дизайн и они не поддерживаются?

643 1 1 золотой знак 6 6 серебряных знаков 16 16 бронзовых знаков Мне кажется тут удобство и дело привычки. У меня знакомый есть, до сих пор не может вникнуть в WPF, он для него не понятный, не удобный. Когда для меня наоборот все, я в WPF могу натворить по дизайну такое, что вряд ли когда либо сделаю на WinForm. Так же как не крути, приложения на WPF более требовательны к ресурсам компьютера, а иногда этого просто не требуется, "Долой красоту, главное что бы стабильно и быстро работало". Скажем какой нибудь софт для бухгалтерии или чего подобного. Пишут на WPF, ещё как, и больше, чем на WinForms. По метке WinForms 1565 вопросов, а по метке WPF 2270. Выводы делайте сами. Кто-то ещё пишет на WinForms?! Я последний раз видел WinForms в 2010 году. И то уже тогда был WPF и все задумывались о том чтобы на него перейти.

У WPF и правда масса преимуществ перед WinForms. Особенно серьёзным преимуществом я бы назвал понятие привязки ( Binding ) и DataContext , которые радикально облегчают написание правильно структурированных программ, в которых представление отделено от модели, бизнес-логики и контента.

(Не то, чтобы на WinForms невозможно было писать правильно, это намного сложнее, и требует ручной работы.)

Но следствием этого и обратной стороной является гораздо более высокая сложность WPF как фреймворка, намного более высокий порог вхождения в WPF и в правильные методики программирования на нём. Ведь сила WPF проявляется именно когда вы начинаете отделять контент от представления, без этого он ненамного лучше WinForms.

Тем, у кого есть опыт программирования на MFC или похожих UI-фреймворках, намного легче перейти на практически аналогичный WinForms, чем учить новые (хотя бы и более удобные и продуктивные) концепции, которые помогают лёгкому, удобному программированию на WPF.

Думаю, именно это является основной причиной того, что WinForms всё ещё существует.


202k 25 25 золотых знаков 273 273 серебряных знака 501 501 бронзовый знак Многие когда-то программировали формочки мышкой в VB 5, VB 6, Delphi 3, Delphi 7, поэтому им WinForms сразу знаком, понятен и привычен @Андрей Именно. Абсолютно все ранние гуёвые фреймворки — тонкие обёртки на стандартными виндовыми контролами, которые существовали с версии Windows 1.0. Поэтому они все похожи как две капли воды. Со временем гуёвые фреймворки обрастали концепциями, которые не существуют в стандартных контролах (у тех даже нет выравнивания), но далеко они не уходили. WPF же — революционный шаг вперёд, принципиально иной подход к построению интерфейса. Пользоваться им "как WinForms" практически невозможно. Из-за этой пропасти всем лень. Но ведь и на Windows Forms гораздо удобнее программировать, используя привязки, а не только события. Но это удобнее далеко не в любой задаче. Поэтому никаких преимуществ у WPF нет, просто эту технологию больше пиарят. Поэтому WPF чисто для модников, для которых практичность не на первом месте. @Modus: Мне не кажется, что преимуществ у WPF реально нету. DataContext, позволяющий автоматизировать привязки, DataTemplate в ресурсах, позволяющий динамически выбирать UI по типу VM, возможность составлять списки с произвольным шаблоном элемента, конвертеры, привязки элементов друг к другу через конвертер, стили (!), возможность подменить шаблон у любого (!) элемента и положить контентом не текст, а произвольный кусок UI (например, внутрь кнопки или пункта меню) — это не убийственные преимущества? Для всего, сложнее чем одна-кнопка-и-одна-таблица, WinForms не кажется мне хорошим выбором.

Не знаю как другие, но лично я не помню тот момент когда последний раз использовал WinForms, если десктоп - лишь только WPF и как бы высокопарно это не звучало, в этой среде он до сих пор впереди планеты всей. При этом не важно, это кровавый enterprise или приложение с "бабочками и цветочками".

  • Декларативное программирование, web подобная модель компоновки.
  • Независимость от разрешающей способности, аппаратное ускорение, поддержка мультисенсорного ввода.
  • Стили, триггеры, шаблоны, анимация, аудио и видео, команды, мощная система привязки, маршрутизируемые события.
  • Продвинутые возможности для рисования.
  • Приложения со страничной организацией.

и куча всего. Кроме того идеи, принципы и философия, которые положены в основу данной технологии, мне очень импонируют, близки и симпатичны. При этом я не являюсь каким-то ярым противником WinForms или фанатиком WPF, но просто если на секунду вдуматься и поразмыслить чего бы стоило сделать на "формах" то что в WPF реализуется минут за 5 или 10, невольно понимаешь всю мощь и те возможности, которые эта технология предоставляет.

При этом как все мирское, WPF не идеальна и не лишена недостатков, но просто плюсов все-равно больше и это факт.

47k 11 11 золотых знаков 74 74 серебряных знака 143 143 бронзовых знака 5,219 2 2 золотых знака 16 16 серебряных знаков 35 35 бронзовых знаков 47k 11 11 золотых знаков 74 74 серебряных знака 143 143 бронзовых знака 1,747 11 11 серебряных знаков 32 32 бронзовых знака

По поводу устарелого дизайна, я вас не понял.

Лично мои наблюдения:

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.

В предыдущем разделе мы определили, что такое WPF и начали обсуждение более старого фреймворка - WinForms. В этом разделе я постараюсь сравнить данные модели, так как, несмотря на одинаковое предназначение, между ними существует множество различий. Если Вы никогда не работали до этого с WinForms и, особенно, если WPF это Ваш первый в изучении GUI фреймворк - можете пропустить текущий раздел, но если все же интересно, прочитайте ниже про различия между WPF и WinForms.

Одним из самых важных различий между WinForms и WPF является тот факт, что в WinForms интерфейс пользователя это всего лишь графический слой, использующий стандартные элементы управления Windows (например TextBox), а WPF-интерфейс, в свою очередь, построен "с чистого листа", не опираясь в большинстве случаев на стандартные элементы. Это может показаться весьма тонкой гранью между рассматриваемыми моделями, но в действительности это не так, и Вы обязательно обратите на это внимание при работе с фреймворком, базирующимся на Win32/WinAPI.

В качестве примера вышеописанной ситуации можно рассмотреть кнопку с изображением и текстом на ней. Этот элемент управления не является стандартом Windows, и, в таком случае, WinForms не предоставляет готового решения. В результате Вы будете вынуждены создать изображение и заимплементировать собственную кнопку, поддерживающую изображения либо воспользоваться готовыми нестандартными решениями. Кнопка в WPF, в свою очередь, может иметь внутри что угодно, так как это просто "рамка", содержащая графический контент, находящаяся в разных состояниях (например: нажатая, ненажатая, реагирующая на наведенный курсор). Ее можно трактовать как "невидимую" (это относится к большинству других элементов управления WPF), это значит, что она может содержать в себе ряд других элементов внутри. Вы хотите получить кнопку с изображением и текстом? Просто поместите элементы Image и TextBlock внутрь кнопки и она готова! В рамках элементов управления WinForms Вы просто не ощутите той гибкости при разработке, что является причиной процветания рынка, который предлагает готовые простые реализации таких элементов как "кнопка с изображением" и подобных.

Слабой стороной гибкости, о которой шла речь является то, что Вам придется больше работать для достижения результата, который просто можно было бы достичь в WinForms, так как она была создана для определенных сценариев. Как минимум, это будет ощутимо в начале, когда Вы захотите например создать шаблон ListView с изображением и хорошо выровненным текстом, тогда как ListView в WinForms это всего лишь одна строка кода.

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

Ниже приведено полностью субъективное мнение на тему ключевых преимуществ WPF и WinForms. Это может помочь Вам понять, какую из технологий стоит использовать.


Winforms

  • В приложении Windows формы Windows предоставляют оболочку, состоящую из набора классов C ++, для разработки приложений Windows, и каждый элемент управления в приложении формы Windows является конкретным экземпляром класса. Он предоставляет различные элементы управления, такие как текстовые поля, кнопки, метки и веб-страницы, а также параметры для создания настраиваемого элемента управления. Для этого в Visual Studio имеется инструмент конструктора форм Windows, который обрабатывает элементы управления в форме и упорядочивает их в соответствии с желаемым макетом для добавления кода для обработки событий.
  • В формах Windows настройка приложения - еще одна функция для создания, хранения и обслуживания информации. Класс формы Windows можно расширить с помощью наследования для разработки инфраструктуры приложения, которая обеспечивает абстракцию и возможность повторного использования кода. Формы должны быть компактными с элементами управления на ограниченном размере. Формы могут быть разбиты на куски, упакованные в сборки, которые могут автоматически обновляться. Разработка приложения обеспечивает масштабируемость и гибкость с легкостью для отладки и обслуживания. Формы Windows не могут быть переданы через границы домена приложения.
  • Основными компонентами архитектуры WPF являются структура представления, ядро ​​представления и mallcore. В WPF элементы пользовательского интерфейса разработаны в XAML, а поведение может быть реализовано на процедурном языке. С XAML в WPF программисты могут работать параллельно с дизайнерами. WPF - это мощная среда для создания приложений Windows, обладающая такими замечательными функциями, как привязка данных, медиа-сервисы, шаблоны, анимация, direct3D и альтернативный ввод.
  • Разработка приложений WPF может быть выполнена с помощью инструментов Microsoft, таких как Visual Studio и Expression Blend. VS в основном используется разработчиком для создания приложения WPF, а Blend в основном используется разработчиками для приложений WPF.

Сравнение лицом к лицу между Winforms и WPF (Инфографика)


Ниже приведены 6 лучших сравнений Winforms и WPF:

Ключевые различия между Winforms и WPF

Обе Winforms против WPF являются популярным выбором на рынке; Давайте обсудим некоторые основные различия между Winforms и WPF:

  1. Формы Windows не являются векторным интерфейсом. Принимая во внимание, что WPF - это уровень представления пользовательского интерфейса на основе векторной графики. Благодаря векторной основе он позволяет уровню представления плавно масштабировать компоненты пользовательского интерфейса без каких-либо проблем с искажением размера.
  2. Формы Windows легче использовать при разработке приложений, тогда как WPF не так сложен в использовании, так как для его использования требуются хорошие знания.
  3. В окнах форм мы можем настроить элементы управления в соответствии с требованиями. В WPF у нас есть сторонние элементы управления, чтобы обогатить возможности приложений.
  4. Окна формы имеют меньшую кривую обучения. Принимая во внимание, что WPF имеет большую кривую обучения, что требует понимания всего потока элементов управления и дизайна.
  5. Окна форм меньше времени или сложнее. WPF сложнее и требует больше времени для разработки приложений.
  6. Формы Windows не используются для разработки новых приложений. WPF используется в основном для разработки новых приложений.
  7. Формы Windows являются большой поддержкой с точки зрения разработчиков, интернет-сообщества, библиотек для помощи любого рода при разработке приложения для начинающих. WPF также имеет достаточно поддержки и библиотек для разработки приложений и быстрого получения поддержки для начинающих.
  8. В формах Windows элементы управления сложно настроить, тогда как в WPF элементы управления можно легко настроить, так как они полностью написаны с нуля.
  9. Формы Windows плохо обеспечивают согласованность. WPF обеспечивает большую согласованность приложений.
  10. В формах Windows пользовательский интерфейс был разработан с помощью языка бизнес-логики. В WPF он использует XAML в качестве языка разметки для разработки пользовательского интерфейса приложения
  11. Формы Windows в основном основаны на пикселях, тогда как WPF не основан на пикселях, что позволяет масштабировать часть пользовательского интерфейса для приложения.
  12. Формы Windows поддерживают привязку данных ограниченным образом, тогда как WPF полностью поддерживает привязку данных.
  13. Формы Windows не используются с разными темами или оболочками. WPF в основном поддерживает скины или темы, где для пользовательского интерфейса могут использоваться различные скины или темы.
  14. Формы Windows требуют меньше усилий для разработки пользовательского интерфейса. WPF требует больше усилий, так как большую часть работы нужно выполнять самостоятельно.

Winforms против WPF Сравнительная таблица

Ниже приведено лучшее сравнение между Winforms и WPF:

Winforms

WPF

Вывод - Winforms против WPF

Winforms и WPF используются в основном для одной и той же цели при разработке и проектировании приложений для Windows, но WPF можно использовать и для веб-приложений. Разница между ними заключается главным образом в масштабируемости и производительности, поскольку WPF может рендериться быстрее по сравнению с формами окон, сложностью и поддержкой.

Рекомендуемая статья

Это было руководство для самого высокого различия между Winforms против WPF. Здесь мы дополнительно рассмотрим дифференцирование ключей Winforms и WPF по инфографике и сравнительной таблице. Вы также можете посмотреть следующие статьи, чтобы узнать больше -


СРАВНИТЕЛЬНЫЙ АНАЛИЗ ГРАФИЧЕСКИХ СИСТЕМ WPF И WINFORMS

1 Волжский политехнический институт (филиал) ФГБОУ ВПО "Волгоградский государственный технический университет" Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Изменения графических систем отображения Windows

Разработка графического интерфейса для Windows-приложений основывается на двух компонентах операционной системы:

User32 – содержит основные элементы окна;

GDI/GDI+ -- предоставляет функционал для рисования фигур, текста.

Для решения этой проблемы была разработана технология WPF. Её главное отличие от WinForms в том, что для отображения графических компонентов используется не GDI/GDI+, а DirectX – технология, разрабатываемая Microsoft для создания игр в тесном сотрудничестве с изготовителями видеокарт, и по этой причине имеет поддержку аппаратного ускорения.

И хоть от компонента User32 не отказались, его использование сводится к задачам не касающихся отображения графического интерфейса, например, определение положения окна. Все задачи, связанные с рисованием возложены на DirectX.

Преимущества WPF

Переход к DirectX представляет собой огромный шаг в развитии и, априори, предоставляет такое превосходство перед другими графическими система как аппаратное ускорение. Однако, WPF обладает и рядом других преимуществ, которые так же повышают его привлекательность для разработчиков.

Рассмотрим наиболее существенные изменения:

Аппаратное ускорение. Как уже было сказано, DirectX разрабатывался в сотрудничестве с изготовителями видеокарт. Однако, просто мощной видеокарты недостаточно, необходима программная поддержка. Именно по этой причине с 2004 года изготовители видеокарт при написании драйверов следуют новым инструкциям от Microsoft.

Аппаратная поддержка предоставляется всем приложениям. В момент запуска анализируются возможности видеокарты и на основание полученных результатов присваивается уровень визуализации от 0 до 2.

Уровень 0 – отсутствие аппаратной поддержки.

Уровень 1 – частичная аппаратная поддержка.

Уровень 2 – полная аппаратная поддержка.

Стили. В основу идеи отрисовки пользовательского интерфейса легла технология HTML. Переход к разработке на XAML дал возможность выводить свойства элементов окон в отдельные стили, по аналоги с CSS. И теперь изменить внешний вид окон стало ее проще, достаточно просто заменить файл со стилями.

Модель рисования. Если в WinForms рисовали пиксели, то в WPF работают с примитивами – это уже готовые базовые фигуры и прочие графические элементы. Кроме того, имеется встроенная поддержка трехмерно графики.

Анимация. В WinForm для того, чтобы форма отрисовала себя, необходимо использовать таймеры. При разработке технологии WPF в Microsoft пошли другим путем и дали ей поддержку анимации.

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

Команды. Также, как и в WinForms, в WPF присутствует событийная модель, базовые элементы были переписаны и наделены новыми возможностями, что также отразилось на событиях, и, тем не менее, принцип остался прежним. Иногда разные компоненты окна вызывают одно и тоже действие, но которое вызывается в разных обработчиках событий. В WPF появился способ вызвать реакцию элемента интерфейса через так называемые команды. Команды подчиняются определенным правилам, например, название метода оканчивается на Command, которое опускается при вызове метода.

Приложения на основе страниц. Можно строить веб-подобные приложения на основе страниц, что дает возможность пользоваться навигацией.

Безопасность. Ранее при разработке приложения, в него могли записать опасный код. Повышение уровня открытости и безопасности стали одними из причин появления языка XAML.

Независимость от разрешения. WPF берет на себя компоновку элементов интерфейса подстраивая его под разные разрешения.

Привязка данных. Привязать данные можно было и в WinForms, но в WPF этот механизм доведен до совершенства. Благодаря привязке существенно снижается количество строк кода и упрощает его анализ.

Заключение

Исходя из стратегии развития Microsoft, можно предположить, что технология WPF будет развиваться и дальше. Например, эта технология используется для написания приложений в стиле Metro.

Если сравнивать графические системы WinForms и WPF, то можно прийти к выводу, что вторая система имеет огромное превосходство. Единственным существенным достоинством WinForms можно назвать кроссплатформенность, такие приложения можно запустить на Mono. О планах по поддержке WPF в системах семейства Unix нет никаких сведений.

Но это не значит, что стоит забыть о технологии WinForms и все свои проекты переводить на WPF. Microsoft не сообщала о прекращение поддержки WinForms. Кроме того, у нее имеется большая история развития, а, следовательно, под неё написано множество готовых решений. Проекты, в которых пользовательский интерфейс стоит не на первом месте, могут быть написаны и на WinForms.

Читайте также: