При создании нового графического интерфейса WPF предпочтительнее, чем Windows Forms?
Большинство ограничений и хитростей с окнами форм являются общими для большинства программистов. Но начиная с версии.NET 3.0 также доступен WPF, Windows Presentation Foundation. Говорят, что с его помощью вы можете упростить "сексуальные приложения", а с.NET 3.5 SP1 он значительно повысил скорость выполнения.
Но с другой стороны, с WPF многое работает по-другому. Я не скажу, что это сложнее, но вы должны выучить "все" с нуля.
Мой вопрос: стоит ли тратить это дополнительное время, когда вам нужно создать новый графический интерфейс, и нет времени для проекта?
34 ответа
WPF позволяет вам делать удивительные вещи, и я ЛЮБЛЮ это... но я всегда чувствую себя обязанным уточнить свои рекомендации, когда разработчики спрашивают меня, думаю ли я, что они должны перейти на новую технологию.
Готовы ли ваши разработчики (желательно EAGER) потратить время, необходимое для того, чтобы научиться эффективно использовать WPF? Я бы никогда не подумал сказать это о MFC, Windows Forms или даже неуправляемом DirectX, но вы, вероятно, НЕ хотите, чтобы команда пыталась "подобрать" WPF в течение обычного dev. цикл доставки товара!
По крайней мере, у одного или двух ваших разработчиков есть определенные особенности дизайна, и у людей, обладающих окончательными полномочиями в области дизайна, есть приличное понимание проблем разработки, так что вы можете использовать возможности WPF для создания чего-то, что на самом деле ЛУЧШЕ, а не просто более "красочно", показывающий бесплатную анимацию?
Использует ли какой-то процент вашей целевой аудитории встроенные графические чипсеты, которые могут не поддерживать функции, которые вы планировали, или они все еще работают под управлением Windows 2000, что полностью исключает их как клиентов? Некоторые люди также спрашивают, действительно ли ваши клиенты заботятся об улучшенных визуальных элементах, но, пережив внутренние дебаты компании "Наши бизнес-клиенты не заботятся о цветах и изображениях" в начале 90-х, я знаю, что хорошо продуманные решения ваших конкурентов заставит их заботиться, и реальный вопрос заключается в том, являются ли условия правильными, чтобы вы могли предложить то, что заставит их заботиться СЕЙЧАС.
Предусматривает ли проект основательную разработку, по крайней мере для уровня представления, чтобы избежать дополнительной сложности попыток подключиться к несовместимым устаревшим лесам (взаимодействие с Win Forms НЕ является бесшовным)?
Может ли ваш менеджер принять (или отвлечься от заметки) значительное снижение производительности труда разработчиков в течение четырех-шести месяцев?
Эта последняя проблема связана с тем, что мне нравится называть "FizzBin" природой WPF, с десятью различными способами реализации любой задачи и без видимой причины предпочитать один подход другому, а также с небольшими рекомендациями, которые помогут вам сделать выбор. Мало того, что недостатки любого выбора, который вы сделаете, станут ясны только намного позже в проекте, но вы фактически гарантируете, что каждый разработчик вашего проекта примет свой подход, что приведет к серьезной головной боли при обслуживании. Больше всего разочаровывают несоответствия, которые постоянно сбивают вас с толку, когда вы пытаетесь изучить основы.
Более подробную информацию о WPF вы можете найти в записи в моем блоге:
После трех месяцев попыток создать бизнес-приложение (LOB) на WPF я решил вернуться к Windows Forms для своего проекта и, изучив мнения других людей, наткнулся на эту тему...
Да, WPF - это блестящая технология, и она имеет преимущества, выходящие далеко за рамки простого наглядного представления... Шаблонные и связывающие возможности являются отличными примерами. Вся объектная модель предлагает большую гибкость и более широкие возможности. Это, однако, не делает его платформой defacto для будущих 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 -> ждать -> запустить -> ошибка -> стон -> stop -> fix -> hit F5.... Весь XAML, на котором работает ваша программа, заблокирован, и отслеживание специфических проблем XAML часто утомительно.
Суть, проще говоря, в том, что инструменты разработки для Windows Forms позволят вам справляться с внешними интерфейсами в течение доли времени от приложения WPF... особенно, если вы создаете таблицы с основными данными или электронные таблицы. как интерфейсы, которые есть у большинства LOB. С Windows Forms вы начинаете с 90% работы, уже выполненной для вас.
Я большой поклонник архитектуры WPF. Я просто хотел бы, чтобы набор инструментов времени разработки не был похож на отладочную сборку до альфа-версии.
Изменить: Этот ответ был опубликован о.NET 3.5 + Visual Studio 2008, но.NET 4.0 с Visual Studio 2010 поставляется с сеткой данных WPF. Хотя в новый опыт разработки WPF было внесено много улучшений, мой ответ здесь остается неизменным, и я хотел бы добавить следующее предложение:
Если вы спешите заняться разработкой RAD, используйте Windows Forms. Если вы хотите создать хорошо спроектированное, обслуживаемое, масштабируемое, ресурсоемкое, многопользовательское приложение Line-Of-Business, рассмотрите ASP.NET MVC + HTML 5 + jQuery... Мои проекты с этими технологиями привели к улучшению результаты, скорее, для моих клиентов. MVC предлагает все те же шаблоны, что и WPF, а jQuery обеспечивает анимацию и сложные взаимодействия. Что еще более важно, решение ASP.NET MVC + jQuery не требует от ваших конечных пользователей наличия современных настольных компьютеров с приличным графическим оборудованием.
Я семь месяцев использую WPF для того, что теперь стало основной системой для моего клиента, и я хотел бы поделиться с вами еще некоторыми мыслями об опыте обучения и использовании WPF в качестве платформы для бизнес-презентаций.
В общем, комментарии, которые я сделал выше, все еще остаются в силе... Поддержка времени разработки для WPF еще не здесь. Если вы спешите получить приложение с расширенными возможностями для клиентов, пользуйтесь Windows Forms. Период. Microsoft не спешит прекращать работу с платформой GDI / Windows Forms, поэтому вы можете рассчитывать на хорошую поддержку в будущем.
WPF не так легко освоить, но это не должно быть, где вы оставляете свое решение о том, вкладывать ли вы свое время и энергию в изучение WPF. Несмотря на отсутствие зрелости, WPF построен на основе некоторых полезных современных концепций.
Например, в WPF ваши инвестиции в хорошо написанные бизнес-объекты со здравой проверочной логикой - это надежные инвестиции. В отличие от Windows Forms, привязка данных WPF полна функций, позволяющих элементам управления интерфейса реагировать на неверный ввод данных пользователем без написания кода GUI для обнаружения этих ошибок. Это ценно.
Возможности стилей и шаблонов в WPF также оказались полезными. Несмотря на распространенное заблуждение о том, что единственное использование для стилизации и создания шаблонов - это создание приятного на экране, правда состоит в том, что эти функции значительно упрощают кодирование пользовательского интерфейса, который дает богатую обратную связь - как кнопки, которые отключают / включают себя на основе состояние нижележащего слоя бизнес-логики или всплывающих подсказок, которые интеллектуально находят свой текст на основе состояния объекта под курсором и т. д.
Все это добавляет невероятно ценные возможности для бизнес-приложений"ничего необычного" просто потому, что позволяет легко поддерживать интерфейс в соответствии с основными данными.
В двух словах:
- В Windows Forms вы разрабатываете свой пользовательский интерфейс, а затем пишете код для управления этим пользовательским интерфейсом, который обычно также включает в себя код для управления вашими объектами данных.
- В WPF вы инвестируете в бизнес-уровень, который управляет вашими объектами данных, а затем разрабатываете интерфейс, который прослушивает ваши объекты данных.
Это, казалось бы, тонкое различие, но оно имеет огромное значение в вашей способности повторно использовать код... что вызывает вопрос: "Является ли вопрос Windows Forms vs WPF на самом деле инвестиционным решением?"
(Кажется, это стало моей любимой темой.)
Есть ли веские причины использовать WPF?
Абсолютно! WPF абсолютно невероятен! Это будет основным преимуществом практически для любого проекта, поскольку в нем так много функций и возможностей, которых нет в Windows Forms.
Для бизнес-приложений самые большие выигрыши будут:
- Фантастическая привязка данных и шаблоны имеют большое значение. После создания достойной модели данных для создания шаблона данных достаточно нескольких щелчков мышью и использования Expression Blend для точной настройки внешнего вида объекта с помощью перетаскивания. И привязка к таким вещам, как цвет или форма, тривиальна.
- Макет экрана невероятно гибок. Мало того, что все в WPF может плавно приспосабливаться к размеру контейнера и изменениям формы, но элементы могут тривиально увеличиваться и вращаться, и даже выходить за пределы их вмещающей рамки.
- Обычные объекты могут быть представлены любым удобным способом, могут иметь разные презентации на разных экранах, могут совместно использовать презентацию и могут адаптировать свою презентацию к изменениям значений данных.
- Если вам нужно распечатать, рендеринг на принтере тривиален. Правильно настроенный WPF делает Crystal Reports или http://en.wikipedia.org/wiki/SQL_Server_Reporting_Services (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 вручную, время от времени - Не сдавайтесь, когда сначала это кажется странным
WPF требует либо Windows Vista, либо Windows XP SP2, что не является обременительным требованием, но оно является уместным. Если вы хотите работать в Windows 2000 (что до сих пор делают некоторые люди), то WPF вам не подойдет.
WPF также является более новой технологией и не так проверена, как Windows Forms, поэтому вы можете выбрать Windows Forms как менее рискованный вариант, особенно для более крупных приложений.
При этом да, WPF - это будущее. Visual Studio 2010 переписывается в WPF, который, вероятно, станет самым большим приложением WPF на сегодняшний день, а также станет настоящим испытанием для этой технологии.
Очевидно, что устаревшие приложения Windows Forms были бы другой ситуацией, когда это правильный выбор.
Как уже говорили другие, в любом случае здесь есть свои преимущества и недостатки. Преимущества 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 обеспечивает новую кривую обучения
Наконец, имейте в виду, что вы можете создавать отличные, привлекательные и привлекательные пользовательские интерфейсы в любом инструменте, если вы выполняете работу (или используете правильные инструменты сторонних производителей). В конце концов, ни один не обязательно лучше при любых обстоятельствах. Используйте то, что кажется правильным для проекта.
Модель программирования для 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, и если вы не научитесь виртуализировать, ваше приложение не будет хорошо работать с большими наборами данных.
У WPF очень крутая кривая обучения, и я рекомендую сначала получить очевидные книги ( Адам Натан, Селлс / Гриффитс и Крис Андерсон) и блоги ( Джош Смит и т. Д.). Просто будьте к этому готовы и убедитесь, что ваш проект позволяет вам изучить WPF.
Помимо изучения технологии, потратьте некоторое время на изучение шаблонов, используемых для создания приложений WPF. Модель View ViewModel (MVVM), похоже, получила широкое признание.
Лично я думаю, что WPF стоит того, но быть предупрежденным. Также обратите внимание, что вы эффективно ограничиваете своих пользователей Windows XP SP2+ и Windows Vista. Мы приняли это решение, но у вас могут быть другие требования.
Обе технологии имеют свои плюсы и минусы. В большом приложении с "классическим" пользовательским интерфейсом я бы использовал Windows Forms. В приложении, которое требует богатого пользовательского интерфейса (скиннинг, анимация, изменение пользовательского интерфейса), я бы выбрал WPF. Пожалуйста, проверьте статью WPF против Windows Forms, сравнивая WPF и Windows Forms.
Помимо гибкости в дизайне пользовательского интерфейса, у WPF есть некоторые технические преимущества:
1.) WPF не полагается на объекты GDI. Ну, я думаю, что он использует 2 объекта GDI для экземпляра самого окна, но это практически ничего. Я был в определенной степени вовлечен в очень большое внутреннее приложение Windows Forms. Люди в нашем офисе иногда запускают 3 или 4 экземпляра одновременно. Проблема в том, что они часто сталкиваются с лимитом в 10000 объектов 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
Я думаю, что стоит изучить WPF. Как только вы наберете скорость, работа над формами станет намного проще, ИМХО. Я бы не стал так сильно беспокоиться о "сексуальных" вещах. Большая часть этого - просто причуда. Вы можете создавать "нормальные" приложения в стиле Winforms очень быстро и легко в WPF.
Вся концепция позволяет легко проектировать IMO.
Я не согласен с некоторыми из ответов здесь. WPF действительно хорошо подходит для бизнес- приложений. (Лучшим примером является LOB-клиент "Лягушонок"). И помимо всех возможностей сделать ваш пользовательский интерфейс привлекательным (что не обязательно для бизнес-приложений), WPF предлагает гораздо больше для вас.
Функции связывания и шаблонирования данных превосходят Windows Forms. Он также предлагает гораздо лучший способ разделения кода и представления. Мы успешно использовали WPF для 2 LOB-приложений в командах, в которых не более 2-3 разработчиков.
Вероятно, самая большая проблема, с которой вы столкнетесь, - это крутая кривая изучения WPF (по сравнению с Windows Forms), которая снизит скорость разработки, так как разработчики не привыкли к WPF.
В настоящее время мы переписываем наше приложение в WPF из Windows Forms. Да, есть крутая кривая обучения, и вам придется "переучивать" некоторые вещи, но это того стоит. И в сочетании с WCF мы обнаруживаем, что пишем меньше кода, быстрее и надежнее, чем когда-либо прежде.
Оставайтесь на некоторое время, прочитайте книгу Адама Натана и посмотрите на постоянно растущую библиотеку сторонних элементов управления, таких как Telerik и ComponentOne. Одним из негативных, на мой взгляд, является то, что инструмент дизайна, Expression Blend, очень неудобно в использовании. Последняя версия все еще находится в бета-версии, но она не подходит тем из нас, кто годами пользовался Visual Studio. Да, это в основном для дизайнеров, но некоторые вещи, которые вы просто не можете сделать в Visual Studio.
Рассмотрите WPF, если дизайн интерфейса важен для вас, потому что WPF может предоставить лучший интерфейс. Но Windows Forms имеет на своей стороне годы эволюции, поэтому она доказала свою эффективность, и вы можете найти много опытных программистов для этой платформы.
Также переносимость может быть проблемой, WPF работает только с Windows XP SP2 и выше.
Кроме того, у WPF есть крутая кривая обучения, а это означает, что нелегко доставить качественный продукт без специального опыта работы с WPF.
Ну, один из ответов - "когда вам нужно поддерживать 1.1 или 2.0", так как WPF является частью.NET 3.0. Существуют известные ограничения ОС для WPF, и существует очевидная проблема с навыками: если у вас есть команда разработчиков, которая знает winforms, то может быть проще создать надежный код с winforms. Однако, если вы пишете много UI-кода, возможно, стоит начать использовать WPF в какой-то момент.
WPF также имеет много общего с Silverlight, поэтому имеет много преимуществ.
WPF обладает многими преимуществами, такими как превосходные функции привязки данных, разделение задач, разделение дизайна и логики и т. Д.
Как разработчик, мне нравится возможность определять свой пользовательский интерфейс с использованием XAML, а не привязываться к дизайнеру Windows Forms, и я чувствую себя хорошо, зная, что могу рассчитывать на другого дизайнера, чтобы приложение выглядело хорошо.
Лично мне все равно, что старые версии Windows не поддерживаются, но одна из больших проблем с WPF заключается в том, что она не поддерживается (в настоящее время / никогда) Mono ( http://www.mono-project.com/), поэтому WPF приложения не будут работать на Mac OS или Linux. (Хотя Silverlight приложения будут).
Если у вас есть время и ресурсы, чтобы инвестировать в изучение WPF, сделайте это! Даже если вы собираетесь писать приложения Silverlight для поддержки нескольких ОС.
Если вам нужны настольные приложения для работы на нескольких ОС с помощью SWF.
Есть много отличий. Мы любили WPF для:
- Декларативный стиль программирования.
- Анимации и переходы состояний
- Expression Blend - отличный инструмент
- Хорошая поддержка стиля.
Тем не менее, мы застряли с Windows Forms, потому что:
- Дополнительное время требуется разработчикам для изучения WPF, когда они уже знают Windows Forms.
- WPF не будет работать на Windows 2000 или ниже.
Самое большое соображение при принятии решения о том, какой из них использовать, это рассмотреть, какой.NET Framework установила ваша целевая аудитория. Я обнаружил, что все больше людей имеют более низкие версии.NET Framework, которые поддерживают только Windows Forms, но это только мой личный опыт.
WPF значительно облегчает передачу работ по дизайну форм фактическому дизайнеру, а не разработчику дизайнерской одежды. Если это то, что вы хотели бы сделать, WPF - ваш ответ. Если с классическими кнопками в стиле Windows все в порядке, то, вероятно, стоит использовать Windows Forms.
(В нескольких ответах утверждается, что вы должны использовать WPF, если дизайн интерфейса "важен для вас", но это довольно расплывчато. Дизайн интерфейса всегда "важен".)
Преимущества WPF в том, что гораздо проще создавать красивый графический интерфейс с настраиваемыми элементами управления и анимацией. WPF также помогает разделить уровни представления и логики. Если у вас есть дизайнеры, это позволяет вам обрабатывать 95% этой работы не-кодировщикам и позволяет кодировщикам работать над логикой. Недостатками являются стоимость программного обеспечения для Expressions Blend и отсутствие каких-либо инструментов для профилирования кода в Visual Studio, которые работают хорошо, так как они, как правило, оказываются вовлеченными в вызовы фреймворков при попытке визуализации XAML. Я уверен, что есть и другие, но это были единственные, кого мы действительно видели.
Основное соображение, если вы хотите, чтобы ваши клиенты должны были установить.NET 3.0 или даже лучше.NET 3.5 SP1. Вы получите отрицательный отзыв
Если у вас есть лицензия MSDN, проверьте Expression Tools. Он разработан специально для WPF, экспортирует напрямую в Visual Studio и может помочь облегчить переход.
Если вы решите пойти с WPF, учитывая плюсы и минусы, уже объясненные в приведенных выше ответах, я настоятельно рекомендую пройти этот эпизод dnrTV с Билли Холлисом.
Существует известная проблема с отображением текста в WPF. Многие пользователи сообщают, что интенсивное использование сглаживания и смешения пикселей приводит к размытости текста. В некоторых обстоятельствах это является серьезным препятствием и, насколько я знаю, было признано Microsoft на определенном уровне.
В эпизоде DotNetRocks 315 Брайан Нойес широко обсуждает это.
В качестве побочного бонуса Silverlight основан на WPF и, начиная с любого, позволяет узнать, как работать с другим. Если дела по-прежнему будут осуществляться через Интернет, то наличие предварительных знаний (и наличие библиотеки существующего кода) для удобной передачи в браузер (или Windows Live Mesh) может помочь вашему программному обеспечению получить дополнительную жизнь.
Если вы заботитесь только о поддержке Windows и не задумываетесь о том, сколько времени нужно на ее изучение, используйте WPF. Он быстрый, гибкий, легко перерисовывается и имеет отличные инструменты для работы с ним.
Последние три с половиной года я занимаюсь разработкой Windows Forms (в двух компаниях). Оба приложения широко использовались, и в итоге возникли проблемы с GDI. В больших приложениях Windows Forms в конечном итоге не хватает ресурсов GDI, что приводит к необходимости перезагрузки конечного пользователя.
Цитата из предыдущего поста от Марка:
- В Windows Forms вы разрабатываете свой пользовательский интерфейс, а затем пишете код для управления этим пользовательским интерфейсом, который обычно также включает в себя код для управления вашими объектами данных.
- В WPF вы инвестируете в бизнес-уровень, который управляет вашими объектами данных, а затем разрабатываете интерфейс, который прослушивает ваши объекты данных.
Я бы сказал, что это скорее выбор дизайна, а не то, используете ли вы Windows Forms или WPF. Однако я могу оценить, что определенные технологии могут лучше подходить для определенного подхода.
Скотт жалуется на Expression Blend и на то, что он не имеет смысла для него как разработчика. Моя первая реакция на Expression Blend была такой. Тем не менее, теперь я вижу его как бесценный инструмент, но это действительно зависит от того, какой вы разработчик.
Я являюсь разработчиком пользовательского интерфейса, который должен был выполнять роль интегратора, и в итоге я нашел, что Expression Blend неоценим для создания стилей и управления шаблонами в стиле WYSIWYG. У меня почти всегда есть Expression Blend и Visual Studio, работающие в одном и том же проекте одновременно.
Я также думаю, что поиграть в Expression Blend и взглянуть на XAML, который выплевывает, является отличным способом изучения API WPF... очень похоже на использование конструктора в Windows Forms и проверку кода C#, который он выплевывает, полезно в изучении, как использовать то, что вы разрабатываете там.
Выражение Blend полезно. Просто попробуйте, особенно если вы работаете над визуальными элементами для приложения.
Поддержка 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.