Является ли WPF предпочтительным выбором при создании нового графического интерфейса по сравнению с Windows Forms?

Большинство ограничений и уловок с формами Windows характерны для большинства программистов. Но, начиная с .NET 3.0, доступен также WPF, Windows Presentation Foundation. Говорят, что с его помощью можно упростить создание «сексуальных приложений», а с .NET 3.5 SP1 он получил хороший прирост скорости выполнения.

Но, с другой стороны, с WPF многое работает иначе. Не скажу, что это сложнее, но «все» надо учить с нуля.

Мой вопрос: стоит ли тратить это дополнительное время, когда вам нужно создать новый графический интерфейс, а для проекта нет дефицита времени?


person Anheledir    schedule 11.09.2008    source источник
comment
Есть ли разница в производительности между WPF и Winforms?   -  person Marklar    schedule 25.09.2009
comment
Да, есть Тим, Winforms намного быстрее почти во всем.   -  person Camilo Martin    schedule 20.03.2010
comment
@Camilo: Я думаю, что ваш комментарий вводит в заблуждение. В большинстве случаев Winforms примерно в 1,2 раза быстрее WPF. Для некоторых вещей это вдвое быстрее. С другой стороны, для многих вещей WPF на самом деле быстрее Winforms, иногда даже значительно (например, анимация в WPF может быть в 10 раз быстрее). Но я не знаю чего-нибудь, для чего Winforms намного быстрее, чем WPF.   -  person Ray Burns    schedule 04.08.2010
comment
@Ray Ну это зависит от вашей видеокарты. Рендеринг векторных изображений для общих элементов управления всегда медленнее, чем отображение растрового изображения на экране. По крайней мере, я видел значительное снижение производительности в нескольких приложениях WPF на виртуальной машине (поскольку виртуальная машина не использовала графическую карту), но я тоже могу ошибаться. Хорошая сторона этого заключается в том, что WPF лучше работает с разработчиком (как только вы его изучите, а я нахожусь) из-за абстракций. Кроме того, процессоры становятся быстрее с каждым днем ​​(по крайней мере, для многопоточного кода).   -  person Camilo Martin    schedule 05.08.2010
comment
Любой набор компонентов (например, DevExpress) в своем воплощении WinForms намного быстрее, чем один из WPF. Включая перерисовку, отзывчивость и требования к памяти.   -  person Lex Lavnikov    schedule 27.11.2010


Ответы (34)


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

Готовы ли ваши разработчики (желательно, EAGER) тратить время, необходимое для обучения эффективному использованию WPF? Я никогда бы не подумал сказать это о MFC, Windows Forms или даже о неуправляемом DirectX, но вы, вероятно, НЕ хотите, чтобы команда пыталась «подобрать» WPF в ходе обычного разработчика. цикл для отгрузки товара!

Есть ли у хотя бы одного или двух из ваших разработчиков некоторая чувствительность к дизайну, и есть ли у лиц, обладающих окончательными полномочиями в области проектирования, достойное понимание проблем разработки, чтобы вы могли использовать возможности WPF для создания чего-то, что на самом деле ЛУЧШЕ, а не просто более "красочного" , показывая бесплатную анимацию?

Работает ли какой-то процент вашей целевой клиентской базы на наборах интегрированных графических чипов, которые могут не поддерживать функции, которые вы планировали, - или они все еще работают под управлением Windows 2000, что полностью исключит их из числа клиентов? Некоторые люди также спросят, действительно ли ваши клиенты ЗАБОТИТСЯ об улучшенных визуальных эффектах, но, пережив внутренние дебаты компании «Наши бизнес-клиенты не заботятся о цветах и ​​изображениях» в начале 90-х годов, я знаю, что хорошо продуманные решения ваших конкурентов заставят их заботиться, и настоящий вопрос заключается в том, являются ли условия подходящими, чтобы вы могли предложить что-то, что заставит их заботиться СЕЙЧАС.

Включает ли проект основную разработку, по крайней мере, для уровня представления, чтобы избежать дополнительных сложностей, связанных с попытками подключиться к несовместимым устаревшим каркасам (взаимодействие с Win Forms НЕ является бесшовным)?

Может ли ваш менеджер согласиться (или отвлечься от того, чтобы заметить) существенное снижение продуктивности разработчиков в течение четырех-шести месяцев?

Эта последняя проблема связана с тем, что мне нравится называть «FizzBin» характером WPF, с десятью различными способами реализации любой задачи и отсутствием очевидной причины предпочесть один подход другому, а также небольшими рекомендациями, которые помогут вам сделать выбор. Недостатки любого сделанного вами выбора не только станут очевидными намного позже в проекте, но и практически гарантировано, что каждый разработчик вашего проекта будет применять другой подход, что приведет к серьезной головной боли при обслуживании. Больше всего расстраивают несоответствия, которые постоянно сбивают вас с толку, когда вы пытаетесь изучить структуру.

Вы можете найти более подробную информацию о WPF в записи в моем блоге:

http://missedmemo.com/blog/2008/09/13/WPFTheFizzBinAPI.aspx

person AndyL    schedule 16.09.2008
comment
Мне нравится, что вы указали на проблемы со встроенными графическими чипами. Это нас не раз кусало. Боль, ох, боль. - person cplotts; 02.10.2008
comment
Мне также нравится, что вы указали на то, что вы называете FizzBin-характером WPF. На самом деле существует так много способов делать что-то, что трудно понять (особенно когда вы только начинаете), какой из них лучший. Если бы я мог показать вам два больших пальца, я бы сделал это. Хороший ответ. - person cplotts; 02.10.2008

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

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

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

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

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

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

Отладка приложений WPF немного похожа на старую парадигму отладки ASP.NET ... нажмите F5 -> подождите -> запустить -> ошибка -> стоп -> исправить -> нажмите F5 -> подождите -> запустить -> ошибка -> стон -> стоп -> исправить -> нажмите F5 .... Весь XAML, на котором работает ваша программа, является заблокирован, и отслеживание проблем, связанных с XAML, часто бывает утомительным.

Суть в том, что инструменты разработки для Windows Forms заставят вас работать с внешними интерфейсами за гораздо меньшую часть времени, чем приложение WPF ... особенно, если вы создание сеток «мастер-детали» или интерфейсов, подобных электронным таблицам, которые есть у большинства бизнес-объектов. С Windows Forms вы начинаете с того, что 90% работы уже сделано за вас.

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


Изменить: этот ответ был опубликован о .NET 3.5 + Visual Studio 2008, но .NET 4.0 с Visual Studio 2010 поставляется с сеткой данных WPF. Хотя в новый опыт разработки WPF было внесено много улучшений, мой ответ здесь остается неизменным, и я хотел бы добавить следующее предложение:

Если вы спешите заняться разработкой RAD, используйте Windows Forms. Если вы хотите создать хорошо спроектированное, поддерживаемое, масштабируемое, ориентированное на ресурсы, многопользовательское бизнес-приложение, подумайте о ASP.NET MVC + HTML 5 + jQuery ... Мои проекты с этими технологиями привели к лучшему результаты, скорее, для моих клиентов. MVC предлагает те же шаблоны, что и WPF, а jQuery позволяет создавать анимацию и сложные взаимодействия. Что еще более важно, решение ASP.NET MVC + jQuery не требует, чтобы ваши конечные пользователи имели современные рабочие столы с приличным графическим оборудованием.

person Mark    schedule 04.03.2009
comment
+1 Не могу согласиться, всегда приятно слышать от кого-то, кто действительно пробовал технологии в реальном мире и с реальным мировым давлением. WPF, вероятно, будет отличным через 5 лет, когда инструменты и разработчики наконец догонят его. И даже тогда WinForms будет существовать. - person Ash; 08.03.2009
comment
Элемент управления DataGrid поддерживает виртуализацию столбцов в WPF 3.5 с пакетом обновления 1 (SP1). Это должно решить проблемы с производительностью. - person Tarnay Kálmán; 20.03.2009
comment
В прошлом я много работал над ASP3 и ASP.NET, и поэтому приветствую возможность разрабатывать свой пользовательский интерфейс с помощью XAML. Я вижу пользовательский интерфейс, когда набираю xaml (в голове), и для меня он намного быстрее, чем дизайнеры пользовательского интерфейса ... однако я разработчик, а не дизайнер, так что это может немного объяснить - person TimothyP; 16.12.2009
comment
Вы используете Expression Blend или VS.NET? VS.NET имеет все проблемы, о которых вы упомянули, но Expression Blend - фантастический инструмент для проектирования и компоновки приложений WPF. По крайней мере, он так же хорош для разработки WPF, как VS.NET для разработки WinForms: я бы сказал, что это намного лучше. На заре WPF инструменты были не так хороши, но Expression Blend 2 решил все проблемы, о которых вы упомянули. XAML всегда полностью редактируется, и я никогда не сталкивался со сбоями или ошибками. Master-Detail практически встроен в CollectionView и функцию /. - person Ray Burns; 18.01.2010

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

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

WPF нелегко освоить, но вы не должны решать, стоит ли тратить свое время и силы на изучение WPF. Несмотря на нынешнюю незрелость, WPF построен на некоторых полезных современных концепциях.

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

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

Все это дает невероятно ценные функции для «ничего особенного» бизнес-приложений просто потому, что они упрощают поддержание согласованности интерфейса с базовыми данными.

В двух словах:

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

Это, казалось бы, тонкая разница, но она имеет огромное значение для вашей способности повторно использовать код ... что вызывает вопрос: «Действительно ли вопрос о Windows Forms и WPF является инвестиционным решением?»

(Кажется, эта тема стала моей любимой.)

person Mark    schedule 06.07.2009
comment
Это действительно вложение, когда вы создаете свое первое приложение WPF. Думаю, что большинство первых WPF-проектов, сделанных и оцененных бывшими программистами WinForms, задержатся. На мой взгляд, стоит изучить WPF, но вопрос в том, думает ли ваш работодатель так же ... - person SwissCoder; 19.01.2011

Есть ли веские причины использовать WPF

Абсолютно! WPF просто невероятен! Это будет большим преимуществом практически для любого проекта, потому что у него так много функций и возможностей, которых не хватает Windows Forms.

Для бизнес-приложений наибольшие преимущества будут:

  • Фантастическая привязка данных и шаблоны имеют самое большое значение. После того, как достойная модель данных создана, потребуется всего несколько щелчков мышью, чтобы создать шаблон данных и использовать Expression Blend, чтобы точно настроить внешний вид вашего объекта с помощью перетаскивания. А привязка к таким вещам, как цвет или форма, тривиальна.
  • Расположение экрана невероятно гибкое. В WPF все может не только плавно подстраиваться под размер контейнера и изменения формы, но и элементы можно тривиально увеличивать и вращать, и даже выходить за пределы их содержащего фрейма.
  • Обычные объекты могут быть представлены как угодно, могут легко иметь разные представления на разных экранах, могут совместно использовать представление и могут адаптировать свое представление к изменениям значений данных.
  • Если вам нужно распечатать, рендеринг на принтер тривиален. При правильной настройке WPF создает Crystal Reports или Службы отчетов SQL Server (SSRS) выглядят как детская игрушка.
  • Ваш пользовательский интерфейс будет выглядеть и ощущаться намного более динамичным, включая такие приятные функции, как кнопки, которые анимируются, когда вы наводите на них указатель мыши.

Для утилит и игр на первый план выходят и другие преимущества:

  • Вы можете легко добавлять в приложение фигуры, линии и произвольные рисунки без использования внешнего редактора. Каждый их компонент может быть привязан к данным и анимирован или управляться кодом. В Windows Forms вам обычно просто нужно импортировать растровое изображение и использовать его как есть, если вы не хотите выполнять много работы.,
  • Анимации классные! Пользователи будут действительно впечатлены, если вы не переусердствуете. Они также могут помочь людям увидеть, что происходит, и уменьшить необходимость в освещении. Например, при перетаскивании объекта вы можете анимировать цель, чтобы показать, что произойдет, если вы ее уроните.
  • Цвета, градиентные заливки, кисти, причудливые шрифты, вращение любых объектов, мозаичные кисти и т. Д. Все, что вы хотите графически, принадлежит вам по запросу.
  • Невероятно настраиваемый. Мне нужно было нарисовать железнодорожные пути для одного приложения, чтобы я мог бросить на них поезд. Через пару часов у меня были железнодорожные пути, которые я мог рисовать в любом месте экрана с помощью кривых Безье, и они присоединятся и переключатся автоматически.

Суть в том, что любой графический интерфейс значительного размера, который вы могли бы создать в Windows Forms, можно построить в WPF с затратами на треть (или меньше) и выглядеть намного лучше.

Требуется ли WPF больше ресурсов (в частности, ОЗУ)

Вы платите цену по сравнению с Windows Forms, но она небольшая.

  • ОЗУ может увеличиваться или уменьшаться в зависимости от вашей реализации. WPF хранит свои данные более эффективно, поэтому отдельные объекты меньше, но в WPF обычно больше объектов, чем в Windows Forms, так что это уравновешивается, и любой из них может выйти вперед.
  • ЦП повысится по сравнению с Windows Forms. По моему опыту, фактическое обновление объектов WPF на экране занимает примерно вдвое больше ЦП, чем при обычном рендеринге Windows Forms. Если ваше приложение тратит большую часть времени на обновление экрана, WPF может быть не для вас. Но в этом случае вы, вероятно, тоже не используете Windows Forms: большинство серьезных игр написаны непосредственно на DirectX .
  • Использование диска будет немного меньше для WPF, потому что он требует гораздо меньше кода, чем Windows Forms. Разумеется, данные будут одинакового размера.

Еще одно замечание об использовании ЦП: анимация и преобразования (движение, перевод и т. Д.) На самом деле более эффективны в WPF, чем в Windows Forms, из-за его сохраненного режима хранения. Это медленнее первоначального подъема предметов наверх.

Накладные расходы на техническое обслуживание

WPF - это огромное преимущество перед Windows Forms в том, что касается обслуживания. Поскольку все выполняется в 1/5 объема кода, как и раньше, остается 1/5 объема кода, который необходимо поддерживать. Плюс ко всему исчезли все стандартные шаблоны, так что вы можете сосредоточиться на коде, который действительно выполняет работу.

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

XAML - это ядро ​​WPF. Хотя WPF можно использовать без XAML, XAML делает его невероятно простым в использовании. XAML обладает способностью HTML легко определять пользовательский интерфейс, но его встроенные теги намного мощнее, и вы можете легко определить свои собственные. (На самом деле это нормально).

Некоторые конкретные преимущества XAML:

  • Весь ваш пользовательский интерфейс определяется в текстовом файле, который легко читать и манипулировать как для пользователей, так и для инструментов.
  • MarkupExtensions позволяет четко и просто указывать привязки.
  • Преобразователи типов позволяют легко задавать свойства со сложными типами. Например, вы можете сказать Brush = "Green" или указать кисть радиального градиента с тремя остановками.
  • Вы можете создавать свои собственные элементы
  • Вы можете легко использовать мощные "присоединенные свойства" WPF

Другая информация

Я много лет мечтал о чем-то вроде WPF. Многие люди реализовали часть этой функциональности, но получить все это в одном месте и по такой цене (0 долларов США) - это потрясающе.

WPF - это огромный сдвиг парадигмы по сравнению с Windows Forms, и к нему нужно привыкнуть, но время, потраченное на его изучение, многократно окупится.

У WPF все еще есть несколько бородавок даже пять лет спустя, но его сила поразит вас, как только вы это почувствуете. Если кто-то попытается перетащить вас обратно в Windows Forms, вы будете только пинаться и кричать.

Советы: - Получите копию Expression Blend для разработки - Время от времени редактируйте XAML вручную - Не сдавайтесь, если сначала это покажется странным

person Ray Burns    schedule 07.11.2009
comment
»Включая приятные функции, такие как кнопки, которые анимируются, когда вы наводите на них указатель мыши« вы имеете в виду, как Windows уже делает для любой нормальной кнопки? - person Joey; 11.08.2010
comment
@Johannes: Нет, не знаю. Все, что делает Windows, - это подсветка кнопки (и даже это работает, только если это обычная кнопка). WPF может сделать гораздо больше. Например, на кнопке может быть значок двери, который открывается на петлях при наведении на нее курсора, или указатель вставки может появляться в другом месте пользовательского интерфейса. Это дополнительное богатство очень полезно в бизнес-приложениях, поскольку увеличивает продуктивность пользователей. - person Ray Burns; 11.08.2010

WPF требует либо Windows Vista, либо Windows XP SP2, что не является обременительным, но вполне уместным. Если вы хотите работать в Windows 2000 (что некоторые люди до сих пор используют), то WPF вам не подойдет.

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

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

Очевидно, что устаревшие приложения Windows Forms будут еще одной ситуацией, когда это будет правильный выбор.

person cletus    schedule 23.12.2008
comment
у вас есть ссылка на эту информацию о VS2010? - person koni; 23.12.2008
comment
Просто Google для Visual Studio 2010 Wpf. Некоторые примеры: demiliani.com/blog/ архив / 2008/10/28 / 6520.aspx ayende.com/Blog/archive/2008/10/27/visual-studio-2010.aspx - person Esteban Brenes; 23.12.2008
comment
тогда я думаю, что лучше подождать, пока MS сделает это, извлечет уроки, исправит все мелочи и добавит все расширения, которые им нужны, чтобы заставить его работать хорошо. - person gbjbaanb; 23.12.2008
comment
Если вы посмотрите блог Рико Мариани, вы увидите, что они уже сообщили команде WPF о множестве ошибок, утечек и проблемах с производительностью. То, что VS активно использует WPF, является большим достижением для WPF, IMO. - person Judah Gabriel Himango; 29.08.2009
comment
Кстати, Windows 2000 просто перестала поддерживаться (звонком в колокол устаревания): support.microsoft.com/ph/1131 < / а> - person JBRWilkinson; 19.07.2010

Как уже говорили другие, в любом случае есть свои преимущества и недостатки. Преимущества WPF, как говорили другие, включают:

  • Возможность относительно легко создавать очень богатые пользовательские интерфейсы.
  • Более легкая анимация и спецэффекты
  • Собственная масштабируемость (используйте инструмент лупы Windows Vista в приложении WPF и в приложении Windows Forms: обратите внимание, что в приложении WPF все векторные изображения прекрасно масштабируются)
  • (ПРЕДУПРЕЖДЕНИЕ О МНЕНИИ) Я считаю, что в WPF «проще» создавать документно-ориентированные системы.

Однако у WPF есть недостатки, в которых Windows Forms выходит впереди:

  • Набор встроенных элементов управления WPF гораздо более ограничен, чем у Windows Forms.
  • Более широкая поддержка сторонних элементов управления для Windows Forms. (Это, конечно, меняется, но подумайте об этом: Windows Forms существует с 2001 года; WPF всего несколько лет. Со временем Windows Forms пользуется большей поддержкой в ​​сообществе.)
  • Большинство разработчиков уже знают Windows Forms; WPF обеспечивает новую кривую обучения

Наконец, имейте в виду, что вы можете создавать великолепные, привлекательные и привлекательные пользовательские интерфейсы с помощью любого инструмента, если вы выполняете работу (или используете правильные сторонние инструменты). В конце концов, ни один из них не обязательно лучше при любых обстоятельствах. Используйте то, что кажется правильным для проекта.

person John Rudy    schedule 14.10.2008
comment
Ваше заявление о том, что набор встроенных элементов управления WPF гораздо более ограничен, чем WinForms, может быть неправильно понято. Встроенный набор элементов управления WPF может делать намного больше, чем WinForms, потому что каждый элемент управления может быть создан по шаблону и является многоцелевым. Почти все в WinForms напрямую отображается в простой WPF. ОДНАКО в исходном выпуске WPF (NET Framework 3.0) отсутствовали три функции, встроенные в WinForms: DateTimePicker, NumericUpDown, DataGrid. Все три загружаются легко, а в последней версии WPF (3.5 SP1) в пакет добавлен DataGrid. - person Ray Burns; 06.11.2009
comment
Кроме того, есть несколько функций отдельных элементов управления WinForms, которых нет, например, автозаполнение для текстовых полей. К этому времени (ноябрь 2009 г.) в блогах были опубликованы простые решения для всех этих проблем. Таким образом, больше нет причин выбирать WinForms, потому что в WPF отсутствуют какие-либо элементы управления. И если в WPF отсутствует необходимый вам элемент управления от поставщика, вы все равно можете использовать интеграцию WinForms для этого элемента управления. - person Ray Burns; 06.11.2009
comment
Для меня самыми большими преимуществами WPF являются привязка данных, шаблоны и макет. - person Ray Burns; 06.11.2009
comment
подумайте об этом: WinForms существует с 2001 года: да, но WinForms не развивались с .NET 2.0 ... - person Thomas Levesque; 07.11.2009
comment
Поймите, когда был написан ответ ... Больше года назад все было правдой. Теперь да, я бы, наверное, сразу же перешел на WPF. :) - person John Rudy; 08.11.2009

Модель программирования для WPF более открыта и гибка, чем Windows Forms, но, как и ASP.NET MVC, она требует немного большей дисциплины с точки зрения правильной реализации шаблонов Model-View-ViewModel.

Мое первое LOB приложение с WPF закончилось полным провалом, потому что это было слишком много ресурсов, остановил работу моих конечных пользователей на ноутбуках очень низкого уровня ... и в конечном итоге это произошло из-за того, что я только что подключился с WPF + LINQ to SQL и ожидал хорошего результата ... и именно здесь WPF так сильно расходится с Windows Forms ... В Windows Forms такие вещи могут сойти с рук . WPF намного тяжелее по ресурсам, чем Windows Forms, и если вы не спроектируете свое приложение так, чтобы оно было компактным, вы получите 800-фунтовую гориллу.

Не уклоняйтесь от WPF ... исследуйте его. Но имейте в виду, что допустимые грехи кодирования Windows Forms не принесут хороших результатов в WPF. Это принципиально разные движки, которые поддаются принципиально разным шаблонам кодирования.

Последнее слово: если вы продолжите работу с WPF, хорошо познакомьтесь с виртуализацией данных для использования со списками и сетками. То, что представляет собой простой ListItem или GridCell с привязкой к данным, в конечном итоге становится здоровенным логическим + визуальным графом объектов в WPF, и если вы не научитесь виртуализировать, ваше приложение не будет хорошо работать с большими наборами данных.

person Mark    schedule 09.03.2009
comment
Спасибо, что вернулись, повторно просмотрели это и поделились своим опытом. Я ценю это. - person Stever B; 11.03.2009
comment
Я испытал точно такой же опыт. К сожалению, я еще не нашел достаточно точной информации о том, как действительно реализовать такое LOB-приложение с WPF. - person Marc; 27.01.2011

Кривая обучения WPF очень крутая, и я рекомендую вам сначала приобрести очевидные книги (Адам Натан, Sells / Griffiths и Крис Андерсон) и блоги (Джош Смит и т. д.). Просто будьте к этому готовы и убедитесь, что ваш проект дает вам время на изучение WPF.

Помимо изучения технологии, потратьте некоторое время на изучение шаблонов, используемых для создания приложений WPF. Model View ViewModel (MVVM), похоже, получил широкое признание.

Лично я считаю, что WPF того стоит, но будьте осторожны. Также обратите внимание, что вы фактически ограничиваете своих пользователей Windows XP SP2 + и Windows Vista. Мы приняли это решение, но у вас могут быть другие требования.

person denis phillips    schedule 12.09.2008

У обеих технологий есть свои плюсы и минусы. В большом приложении с «классическим» пользовательским интерфейсом я бы использовал Windows Forms. В приложении, для которого требуется богатый пользовательский интерфейс (скиннинг, анимация, изменение пользовательского интерфейса), я бы выбрал WPF. Ознакомьтесь со статьей WPF и Windows Forms сравнение WPF и Windows Forms.

person Oleg    schedule 23.12.2008
comment
+1 за ссылку. У Джоша большой реальный опыт работы с успешно разработанными проектами WPF, включая NY Times Reader. - person DK.; 24.12.2008

Помимо гибкости в дизайне пользовательского интерфейса, WPF обладает некоторыми техническими преимуществами:

1.) WPF не полагается на объекты GDI. Я думаю, что он использует 2 объекта GDI для экземпляра самого окна, но это практически ничего. Я был в определенной степени вовлечен в очень большое внутреннее приложение Windows Forms. Люди в нашем офисе иногда запускают 3 или 4 экземпляра одновременно. Проблема в том, что они часто сталкиваются с ограничением в 10 000 объектов GDI, присущим Windows 2000, XP и Vista. Когда это произойдет, вся ОС перестает отвечать, и вы начнете видеть визуальные артефакты. Единственный способ разобраться - закрыть приложения.

2.) WPF использует графический процессор. У WPF просто великолепная возможность выгружать часть обработки пользовательского интерфейса на графический процессор. Я только ожидаю, что этот аспект со временем станет лучше. Как бывший любитель программирования OpenGL, я могу оценить мощность, исходящую от графического процессора. Я имею в виду, что моя видеокарта за 100 долларов имеет 112 ядер, работающих на частоте 1,5 ГГц каждое (и это ни в коем случае не лучший вариант). Такая мощность параллельной обработки может посрамить любой четырехъядерный процессор.

Однако WPF все еще довольно новый. Он не работает в Windows 2000. Фактически, приложение WPF может медленно запускаться после новой перезагрузки. Обо всем этом я рассказываю в своем блоге: http://blog.bucketsoft.com/2009/05/wpf-is-like-fat-super-hero.html

person Steve Wortham    schedule 19.05.2009
comment
+1 за то, что техническая перспектива дополняет дизайнерскую. - person Robert Fraser; 12.04.2010
comment
Интересно, имеет ли GDI + какое-либо отношение к этим вопросам? - person JBRWilkinson; 19.07.2010
comment
Привет, Стив. Отличные моменты, хотя я ударился головой о графическом процессоре, когда обнаружил, что многие пользователи моего приложения используют ноутбуки с поддельными чипами Intel с графическим процессором, что бесконечно влияет на производительность WPF. - person Mark; 24.10.2010
comment
@JBR - Я не уверен насчет GDI +. @Mark - Я понимаю, что вы имеете в виду, некоторые из этих интегрированных чипов ужасны. - person Steve Wortham; 24.10.2010

Думаю, стоит изучить WPF. ИМХО, как только вы освоитесь, работа над дизайном ваших форм станет намного проще. Я бы не стал так сильно беспокоиться о «сексуальных» вещах. По большей части это просто прихоть. В WPF можно очень быстро и легко создавать «обычные» приложения в стиле Winforms.

Вся концепция поддается более легкому дизайну IMO.

person GEOCHET    schedule 11.09.2008
comment
Я согласен с Ричем. Сексуальность WPF была подчеркнута чрезмерно. Я считаю, что это отличная технология, которая предлагает несколько очень веских аргументов в пользу ее использования ... для стандартных, обычных бизнес-приложений. - person cplotts; 02.10.2008

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

Функции привязки данных и шаблонов просто превосходят Windows Forms. Он также предлагает гораздо лучший способ разделения кода и представления. Мы успешно использовали WPF для 2 LOB-приложений в командах, состоящих не более чем из 2–3 разработчиков.

Самая большая проблема, с которой вы столкнетесь, - это, вероятно, крутая кривая обучения WPF (по сравнению с Windows Forms), которая снизит скорость разработки, если разработчики не привыкли к WPF.

person Joachim Kerschbaumer    schedule 24.12.2008
comment
Я должен согласиться ... кривая обучения крутая, но в конечном итоге это окупается. Я начал с WPF и никогда не оглядывался назад. - person TimothyP; 24.11.2009

В настоящее время мы переписываем наше приложение в WPF из Windows Forms. Да, есть крутая кривая обучения, и вам придется кое-что «переучивать», но это того стоит. В сочетании с WCF мы обнаруживаем, что пишем меньше кода, быстрее и надежнее, чем когда-либо прежде.

Придерживайтесь этого некоторое время, прочтите книгу Адама Натана и ознакомьтесь с постоянно растущей библиотекой сторонних элементов управления, таких как Telerik и ComponentOne. Один недостаток, на мой взгляд, заключается в том, что инструмент дизайна Expression Blend очень неудобен для использовать. Последняя версия все еще находится в стадии бета-тестирования, но она кажется неправильной тем из нас, кто использовал Visual Studio в течение многих лет. Да, это в основном для дизайнеров, но некоторые вещи вы просто не можете сделать в Visual Studio.

person ScottG    schedule 12.09.2008
comment
Да, писать меньше кода, быстрее и надежнее, чем когда-либо, - отличный способ описать опыт WPF. На самом деле это совсем не о глазных конфетах. Кстати, с тех пор, как это было написано, Expression Blend был выпущен, уже до версии 3 и очень удобен в использовании - лучше, чем любой дизайнер VS.NET, когда-либо созданный. - person Ray Burns; 18.01.2010
comment
Вышла новая версия этой книги amazon.com/WPF- 4-Unleashed-Adam-Nathan / dp / 0672331195 - person bobobobo; 28.09.2011

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

Также может возникнуть проблема с переносимостью, WPF работает только с Windows XP SP2 и выше.

Кроме того, у WPF крутая кривая обучения, а это означает, что нелегко создать качественный продукт, не имея специального опыта работы с WPF.

person David Lay    schedule 23.12.2008

Что ж, один ответ - «когда вам нужно поддерживать 1.1 или 2.0», поскольку WPF является частью .NET 3.0. Существуют известные ограничения ОС для WPF и очевидная проблема с навыками: если у вас есть команда разработчиков, знающих winforms, то, возможно, будет проще создать надежный код с winforms. Однако, если вы пишете много кода пользовательского интерфейса, вероятно, в какой-то момент стоит начать использовать WPF.

WPF также имеет много общего с Silverlight, поэтому у него есть передаваемые преимущества.

person Marc Gravell    schedule 23.12.2008

WPF имеет множество преимуществ, таких как превосходные функции привязки данных, разделение задач, разделение дизайна и логики и т. Д.

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

Лично меня не волнует, что старые версии Windows не поддерживаются, но одна из больших проблем с WPF заключается в том, что он (в настоящее время / когда-либо) не поддерживается Mono (http://www.mono-project.com), поэтому приложения WPF не будут работать в Mac OS или Linux. (Хотя приложения Silverlight будут).

Если у вас есть время и ресурсы, чтобы инвестировать в изучение WPF, сделайте это! Даже если вы собираетесь писать приложения Silverlight для поддержки нескольких ОС.

Если вам нужны настольные приложения для работы на нескольких ОС, используйте SWF.

person TimothyP    schedule 23.12.2008
comment
WPF имеет множество преимуществ, таких как превосходные функции привязки данных, разделение задач, разделение дизайна и логики и т. Д. Согласовано. WPF предлагает гораздо больше, чем просто модный вид. Он предлагает лучшие архитектурные варианты. - person Daniel Auger; 23.12.2008
comment
Для меня это большой разрыв. Я обновляю одно из своих приложений до 2.0, и хотя все мои первоначальные эксперименты с WPF были замечательными, я действительно хочу, чтобы приложение было кроссплатформенным, поэтому я собираюсь сделать 2.0, используя Winforms для использования Mono. Это не помешает мне переписать другие мои приложения в WPF - person Dillie-O; 26.12.2008

Есть много отличий. Нам понравился WPF за:

  1. Декларативный стиль программирования.
  2. Анимации и переходы между состояниями
  3. Expression Blend - отличный инструмент
  4. Хорошая поддержка стиля.

Однако мы остановились на Windows Forms, потому что:

  1. Дополнительное время, которое требуется разработчику для изучения WPF, когда он уже знает Windows Forms.
  2. WPF не будет работать в Windows 2000 или более ранней версии.
person amcoder    schedule 14.10.2008
comment
Так ли важна Windows 2000 ?? Я имею в виду, сколько людей застряло в этой археологической ОС? - person Camilo Martin; 20.03.2010
comment
Это потому, что Microsoft спонсирует некую специальную школьную версию (Windows 2k) для старых ноутбуков и ПК - я думаю, проект называется FreshStart ... - person Aykut Çevik; 29.07.2010
comment
Ага, хоть WinXP ... Win2000 ?! да брось! - person Andrei Rînea; 01.11.2010
comment
@cevik, Fresh Start вроде как умер в 2009 году. microsoft.com/Education/Freshstart/ FsSplash.aspx - person dan-gph; 27.04.2011
comment
@dangph, это к сожалению правда, надеюсь с ХР запустят может :) - person Aykut Çevik; 27.04.2011

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

person Jon Tackabury    schedule 14.10.2008
comment
В ноябре 2009 года на 20-50% всех компьютеров уже была установлена ​​NET Framework 3.0 или выше, поэтому они уже могут запускать WPF. Для тех, кто этого не делает, вы можете включить его на свой компакт-диск или попросить ваше приложение загрузить клиентский профиль NET Framework при его установке. Для загрузки профиля клиента по линии DSL 256K требуется 2 минуты, и вы можете сэкономить полосу пропускания, установив его загрузку с веб-сайта Microsoft. - person Ray Burns; 06.11.2009

Преимущества WPF в том, что намного проще создавать красивый графический интерфейс с настраиваемыми элементами управления и анимацией. WPF также помогает в дальнейшем разделять уровни представления и логики. Если у вас есть дизайнеры, это позволит вам передать 95% этой работы некодерам и позволит кодерам работать над логикой. Недостатками являются стоимость программного обеспечения для Expressions Blend и отсутствие каких-либо инструментов профилирования кода Visual Studio, которые хорошо работают, поскольку они, как правило, попадают в вызовы фреймворка при попытке визуализировать XAML. Я уверен, что есть и другие, но это были единственные два, которые мы действительно видели.

Главное соображение, если вы хотите, чтобы ваши клиенты установили .NET 3.0 или даже лучше .NET 3.5 SP1. Вы получите негативный отзыв

person Alex    schedule 14.10.2008
comment
Вы можете включить NET Framework на свой компакт-диск или настроить его на двухминутную загрузку с веб-сайта Microsoft (при условии, что линия DSL 256K). В любом случае его можно установить как часть установки вашего приложения. Это также работает с ClickOnce. - person Ray Burns; 06.11.2009
comment
У меня есть 2M DSL, и вся установка занимает обычно полчаса, если она не дает сбоев на моих (обычно чистых) машинах XP. - person Camilo Martin; 20.03.2010
comment
По моему опыту, установка профиля клиента (3.5 SP1) на XP занимает около 5 минут, включая загрузку. До сих пор он всегда устанавливался без проблем. Некоторые идеи о том, что может вас замедлить: 1. Вы устанавливаете полную структуру вместо профиля клиента, 2. У вашего интернет-провайдера низкая пропускная способность для серверов Microsoft и отсутствует кэширование, 3. Ваш локальный компьютер занят обновлением Windows или другим программным обеспечением. обновления, 4. Ваша локальная полоса пропускания перегружена (например, при потоковой передаче аудио / видео). - person Ray Burns; 19.04.2010
comment
Может быть, я был недостаточно ясен. Скорость загрузки и отсутствие нажатия кнопок оказывают лишь частичное влияние на принятие решения о необходимости установки фреймворка. Наибольшее внимание следует уделить тому, будет ли какой-либо из ваших клиентов находиться в корпоративной или образовательной ситуации, когда локальный пользователь может НЕ иметь возможности установить его. - person Alex; 19.04.2010

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

(В нескольких ответах утверждается, что вам следует использовать WPF, если дизайн интерфейса «важен для вас», но это довольно расплывчато. Дизайн интерфейса всегда «важен».)

person Jonathan Beerhalter    schedule 23.12.2008
comment
Если классические кнопки в стиле Windows подходят, и вы хотите потратить намного больше времени на написание и отладку сантехники, возможно, вам подойдет WinForms. После освоения WPF намного более эффективен для разработки, чем WinForms, благодаря богатой привязке данных и шаблонам данных, архитектуре команд, присоединенным свойствам и т. Д. Это верно, даже если вы вообще не заботитесь о визуальном стиле. - person Ray Burns; 18.01.2010
comment
проявитель в дизайнерской одежде - карманные протекторы и водолазка? - person Robert Fraser; 12.04.2010

Если у вас есть лицензия MSDN, воспользуйтесь инструментами выражения. Он разработан специально для WPF, экспортируется непосредственно в Visual Studio и может облегчить переход.

person Rob Allen    schedule 12.09.2008

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

person Serafina Brocious    schedule 11.09.2008

В качестве дополнительного бонуса Silverlight основан на WPF, и, начиная с одного, вы можете узнать, как работать с другим. Если что-то по-прежнему будет осуществляться через Интернет, наличие предварительных знаний (и библиотеки существующего кода), которые можно легко перенести в браузер (или Windows Live Mesh), может помочь продлить жизнь вашему программному обеспечению.

person Nidonocu    schedule 14.09.2008

Если вы решите использовать WPF, учитывая плюсы и минусы, уже объясненные в приведенных выше ответах, я настоятельно рекомендую пройти через это эпизод dnrTV с Билли Холлисом

person Vin    schedule 15.09.2008
comment
Мне особенно понравились первые 25 минут этого видео, где Билли Холлис демонстрирует некоторые различия в возможностях WPF и WinForms. - person Ray Burns; 18.01.2010

В эпизоде ​​315 DotNetRocks Брайан Нойес подробно обсуждает это.

person Jim Anderson    schedule 03.02.2009

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

person Icabod    schedule 23.12.2009
comment
Это исправлено в .NET 4 - см. blogs.msdn.com/text/archive/2009/08/24/ - person Ben M; 02.02.2010

Последние три с половиной года занимаюсь разработкой Windows Forms (в двух компаниях). Оба приложения широко использовались, и в итоге у них возникли проблемы с GDI. В больших приложениях Windows Forms в конечном итоге будут исчерпаны ресурсы GDI, что приведет к перезагрузке конечного пользователя.

person DeveloperAlex    schedule 19.11.2009

Скотт жалуется на Expression Blend и на то, как для него как разработчика это не имеет смысла. Моя первая реакция на Expression Blend была такой. Однако сейчас я вижу в нем бесценный инструмент, но это действительно зависит от того, к какому типу разработчика вы относитесь.

Я разработчик пользовательского интерфейса, которому приходилось использовать интегратор, и в конце концов я обнаружил, что Expression Blend бесценен для создания стилей и управления шаблонами в стиле WYSIWYG. У меня почти всегда есть Expression Blend и Visual Studio, работающие над одним и тем же проектом одновременно.

Я также думаю, что поигрался в Expression Blend и взглянул на XAML, который выплевывает - отличный способ изучить WPF API ... во многом как использование конструктора в Windows Forms и проверка кода C #, который он выводит, помогает научиться использовать все, что вы там разрабатываете.

Expression Blend полезен. Просто попробуйте, особенно если вы работаете над визуализацией приложения.

person cplotts    schedule 02.10.2008

Цитата из более раннее сообщение Марка:

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

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

person user218981    schedule 25.11.2009

Только если у вас нет опыта в WPF и вы не хотите в него вкладывать :)

person akjoshi    schedule 10.06.2010
comment
-1 за то, что побуждает людей думать, что не инвестировать в WPF - действительно допустимый вариант. - person Turing Complete; 19.07.2010
comment
Я думаю, что все неправильно истолковывают мой ответ. Я сказал: «Вы не хотите инвестировать в WPF», что не означает «Не инвестируйте в WPF». Это так? - person akjoshi; 13.08.2010
comment
Я бы оставил это на усмотрение пользователей SO. - person akjoshi; 01.12.2010

Поддержка WPF декларативного пользовательского интерфейса через XAML, богатые шаблоны элементов управления и стили, а также такие инструменты, как Expression Blend, делают дизайнерам намного лучше работать с разработчиками над одним и тем же проектом. Кроме того, это дает разработчикам гибкость присоединенных свойств зависимостей и чрезвычайно мощную привязку данных. Кроме того, Silverlight поддерживает подмножество XAML и те же классы элементов управления, что и WPF, поэтому ваше приложение может быть перенесено как RIA с минимальными усилиями.

Я бы в любой момент предпочел WPF Windows Forms. Даже если на целевых машинах есть только .NET 2.0, если пользователь может устанавливать дополнительные программы, новый профиль клиента .NET Framework упрощает развертывание приложений WPF.

Единственная причина, по которой я мог бы решить придерживаться Windows Forms, заключается в том, что продукт будет развернут на заблокированных машинах, на которых установлены только .NET 2.0 или .NET 1.1.

person Franci Penov    schedule 14.10.2008

Я бы использовал Winforms для быстрого доказательства концепции, потому что, хотя это ужасно для реальных приложений, это очень хорошо для быстрого прототипирования в стиле "Visual Basic 6.0".

Итак, вот пример:

Если мне нужно отследить несколько этапов процесса (например, загрузить что-то, вычислить / преобразовать, создать интеллектуальный вывод) и сделать все воспроизводимым, я обычно делаю быструю форму с готовым ListBox и несколькими кнопками.

Поскольку я НАСТОЯЩИЙ разработчик, логика в любом случае уже будет в классах, отличных от представления, так что это отличное место для начала.

person Turing Complete    schedule 19.07.2010

Для проектов преобразования (с Visual Basic 6.0) сложно заставить команду переключиться в WPF. Помимо кривой обучения, люди уже привыкли к старому интерфейсу. Windows Forms, несмотря на то, что она постепенно прекращается, будет существовать еще долгое время.

person Echiban    schedule 26.12.2008
comment
Эти команды правы, отвергая WPF. Преобразование VB6- ›WPF на самом деле было бы переработкой, и, по мнению Microsoft, было бы гораздо более затратным и сложным, чем автоматическое преобразование. Ссылка здесь stackoverflow.com/questions/395/ - person MarkJ; 13.03.2009

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

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

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

person Gurpreet Singh    schedule 05.09.2011