Лучше ли использовать WPF поверх Windows Forms? - PullRequest
20 голосов
/ 13 марта 2009

Для нового приложения лучше использовать WPF поверх Windows Forms? Я использовал Windows Forms раньше, но не так много WPF. Насколько я знаю, WPF является преемником Windows Forms, верно?

Приложение будет поддерживать Windows DirectX (не WPF 3D, но Управляемый DirectX и SlimDX ) со множеством пользовательских элементов управления.

РЕДАКТИРОВАТЬ: приложение представляет собой 3D-приложение, относящееся к редактору, например modo :

Image created using the 3D painting program modo.

Ответы [ 10 ]

18 голосов
/ 13 марта 2009

Мы занимались этим вопросом около 9 месяцев назад. Мы решили пойти с WPF, и пока мы рады этому решению. Да, есть кривая обучения. Это довольно значительно, особенно из WinForms, где вам так много нужно отучиться. Я также рекомендую вам иметь доступ к дизайнеру, иначе ваше приложение, вероятно, будет выглядеть немного потрепанным. Кроме того, будьте готовы к тому, что некоторые гадости WPF заставят вас часами чесать голову, говоря «почему это было так сложно».

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

О да, и будьте готовы выложить пару долларов за некоторые недостающие элементы управления. Есть несколько вещей, отсутствующих, например, средство выбора даты и наличие флажков на древовидных элементах управления (на самом деле вы можете шаблонизировать это, но это не так просто, как winforms в этом отношении). 3.5 SP1 включает в себя элемент управления сеткой, к счастью.

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

Удачи!

16 голосов
/ 12 июня 2011

Я знаю, что это старый пост, но я думаю, что это все еще правильный вопрос.

Я использовал WinForms в течение 3 лет в первой компании, в которой работал. Там было несколько действительно хороших программистов, и они нашли несколько очень умных способов сделать очень крутые вещи. WinForms выдержал испытание временем. Это надежная, надежная и эффективная платформа. Многие люди, а также многие компании, как крупные, так и небольшие, используют WinForms в течение многих лет, и эта технология снова и снова зарекомендовала себя. С такой инерцией трудно бороться, даже если вы Microsoft.

Тем не менее, WPF определенно будущее. Microsoft ясно дала это понять, создав такие продукты, как Visual Studio 2010 и Expression Blend. (При использовании WPF для внутренних проектов Microsoft была вынуждена исправить многие проблемы, такие как отрисовка шрифтов и проблемы со скоростью, которые не позволяли людям сначала принять его. Visual Studio 2010 показывает, что WPF уже давно готов к работе.

Итак, лучше ли писать свою программу в WinForms или WPF? Ответ таков: WPF. Я говорю это по двум причинам. Во-первых, поскольку Microsoft поддерживает его внутренне, мы можем предположить, что он будет существовать очень долго. Microsoft показала нам, что это следующий инструмент выбора, который подводит меня к следующему пункту: он превосходит WinForms (некоторые люди, с которыми я говорил, не согласны, но, тем не менее, это правда, и с каждым днем ​​она становится все более очевидной) , В WPF есть множество функций, которые WinForms (вероятно) никогда не будут предоставлены, такие как интегрированная поддержка потрясающего связывания данных и анимации на основе шкалы времени, которые позволяют легко создавать удивительные темы для ваших приложений, и дизайнеры будут просить сделать это. В WPF гораздо больше, чем можно описать в комментарии, но для меня это два больших вопроса:)

При этом я знаю, что вы ничего не можете сделать в WPF, чего вы не можете сделать в WinForms. Вы можете делать что угодно на любом языке, если хотите достаточно сильно. Дело в том, что там, где WinForm оставит вас в поисках Google для того, как кто-то еще сделал что-то классное, WPF поставляется со встроенной поддержкой всех функций, которые Microsoft считает будущим Windows, и предоставляет их вам в руки.

Со временем люди привыкнут к новым функциям, встроенным непосредственно в Windows, и начнут ожидать, что они будут доступны во всех используемых ими приложениях. Это достигнет точки, когда все, что их не поддерживает, будет казаться неуклюжим, менее пригодным для использования и, по-видимому, будет стоить меньше денег. (Я считаю, что интеграция с сенсорным экраном является наиболее очевидным примером этого. Хотя существуют решения с сенсорным экраном, которые крепятся к монитору и эмулируют мышь, на любом компьютере технология сенсорного экрана прошла очень долгий путь, а Windows 8 размыла линию между настольным компьютером и мобильными устройствами люди, вероятно, захотят использовать приложения таким образом, что их будет чрезвычайно сложно реализовать, если ваше приложение использует WinForms.)

Рано или поздно, я считаю, что поддержка и разработка для WinForms прекратятся, и все, кто оставит себя позади, будут вынуждены портировать, и быстро. Тем не менее, существует слишком много программ, которые полагаются на WinForms для Microsoft, чтобы иметь возможность удалить его в ближайшем будущем. Кто знает, что будет. Возможно, WinForms станет для Microsoft тем же, что и процессоры Itanium для Intel, продуктом, у которого достаточно пользователей, чтобы поддерживать его, даже несмотря на то, что существуют лучшие решения. (http://arstechnica.com/business/news/2011/06/ask-ars-why-itaniumask-ars-with-xeons-improvement-why-bother-with-itanium.ars)

Так что мой совет будет таким: в отношении новых разработок, переключитесь на WPF. Отправьте некоторых сотрудников на учебные курсы или дайте им поиграть некоторое время, чтобы они могли лучше понять технологию. Кривая обучения будет крутой, но это увеличит набор навыков вашей команды, потому что, изучая WPF, они также будут на пути к изучению SilverLight, который достаточно похож на WPF для людей, знакомых с WPF, чтобы иметь возможность чтобы выучить это быстро, но предназначен для Интернета, а не для рабочего стола. Это ценно, потому что приложения, переписанные в WPF, будут намного проще конвертировать в веб-приложения в дальнейшем. WPF является новым, но он создан не просто ради того, чтобы люди могли чему-то научиться. Он был разработан, чтобы сделать приложения более удобными, интуитивно понятными и портативными. Оно было разработано, чтобы помочь разработчикам приспособить свои приложения к новой эре компьютеров.

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

11 голосов
/ 13 марта 2009

---- РЕДАКТИРОВАТЬ 2 -----

Учитывая, что вы пытаетесь создать редактор, подобный тому, который вы показали, я бы рекомендовал использовать WPF еще больше. Мой текущий проект также имеет много функций в этом направлении, и мы решили, что возможность компоновки WPF с контентом Direct3D чрезвычайно мощна. Приятно иметь возможность рендерить вашу сцену во что угодно - не только в прямоугольное окно. В WinForms вы в значительной степени ограничивались одним прямоугольником, и у вас тоже были проблемы с воздушным пространством (тонкие, но такие вещи, как проблемы с мерцанием, когда меню перебирали ваш hwnd и т. Д.). Композитор WPF с D3DImage избавляет от всех этих проблем и позволяет вам использовать свое воображение для создания очень гибкого пользовательского интерфейса. Возможны такие вещи, как рендеринг вашей сцены в реальном времени на стороне объекта WPF3D, или использование элементов управления WPF непосредственно поверх вашей сцены d3d вместо попыток создания графического интерфейса в D3D и т. Д.

----- Оригинал ---------

Если вы собираетесь использовать DX, вы можете рассмотреть это, особенно если учесть, что он дает вам возможность создавать композиции с вашим пользовательским интерфейсом и не создавать проблем с воздушным пространством, если вы используете D3DImage .

Это работает с SlimDX и WPF.

---- EDIT -----

Для получения дополнительной информации о недостатках использования Direct3D с Winforms и преимуществах интеграции WPF / DX см .:

Статья MSDN по воздушному пространству

Арктик кодового проекта на вступлении к D3DImage

6 голосов
/ 13 марта 2009

Я обнаружил, что как только я получил представление о Expression Blend и WPF, я стал более продуктивным в создании пользовательских интерфейсов, чем в Windows Forms. На мой взгляд, это один из, если не самый важный фактор, связанный с новой технологией / инструментом; если вы не можете добиться того же результата, что и старый инструмент, быстрее с новым инструментом, тогда все навороты, которые вы используете только 10% времени, не восполнят это.

Помимо этого, у WPF есть и другие преимущества перед формами:

  • Наличие интерфейса в XAML значительно упрощает точную настройку всех этих скрытых свойств или вырезание и вставку целого раздела одного элемента управления в другой,

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

  • Некоторые из наворотов крутые. Я обнаружил, что использование анимаций (раскадровок) действительно полезно для экранов ввода данных, где вам нужны разные поля ввода в зависимости от того, какой продукт выбран или тому подобное. С помощью форм вы должны будете создать отдельную панель / форму для каждого экрана ввода данных, а с помощью WPF я использую анимацию, чтобы скрывать и перемещать различные текстовые поля вокруг.

4 голосов
/ 13 марта 2009

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

Я выполнил немного написания пользовательских элементов управления в WinForms, и это может быть очень проблематично. Макет действительно займет некоторое время у вас. Несколько выходных в моей жизни были выплачены WinForm Control Layout. Написание эквивалентных элементов управления в WPF было нелегко.

3 голосов
/ 13 марта 2009

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

Мы начинаем понимать, что наше будущее на самом деле не WPF, а Silverlight. По мере взросления Silverlight он становится все более и более наравне с WPF и позволяет вам работать на кроссплатформенных платформах. Путь Silverlight больше похож на Adobe Air, и однажды он будет жить вне браузера (на самом деле вы можете сделать это сейчас, но это неприятно). Я действительно думаю, что будущее за .NET UI будет за Silverlight.

2 голосов
/ 13 марта 2009

Совсем недавно, сделав очень похожий продукт (3D Viewer для анализа данных в WPF), я определенно могу порекомендовать WPF / SlimDX.

Инструменты немного слабоваты (особенно Visual Studio), но WPF значительно упрощает создание приложения с небольшим количеством Zing, а не стандартным серым цветом, который есть у большинства вещей.

Используя D3DImage из 3.5SP1, очень легко разместить устройство SlimDX внутри элемента управления.

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

2 голосов
/ 13 марта 2009

В этом случае я бы сказал, что следует примеру вашего Продавца (то есть Microsoft). Их собственное внутреннее производство все чаще включает WPF; и его сфера (думаю, Silverlight) и глубина явно больше, чем WinForms. Они также используют его все чаще со ссылкой на передовой опыт. Судя по всем данным (здесь и в других местах), он, похоже, готов к развитию в прайм-тайм.

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

1 голос
/ 23 июня 2010

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

Однако, если я пишу приложение для ввода и отображения данных, я обычно использую Windows Forms для ускорения разработки. Редактор XAML лучше в Visual Studio 2010, но все еще есть путь. Без справки нет справки IntelliSense по многим атрибутам свойств, поэтому невозможно узнать, что в них содержится (именно на этом я трачу много времени, пытаясь найти эти значения, с помощью книги или примеров в Интернете) , Тем не менее, если вы делаете запись в WPF, вы можете создать несколько очень привлекательных пользовательских интерфейсов.

1 голос
/ 13 марта 2009

AFAIK WPF является преемником WinForms, верно?

Я не верю, что это правда так сильно, как MS хотел бы подтолкнуть это. На Winforms написано слишком много унаследованного кода, чтобы это стало реальностью в ближайшем или даже несколько отдаленном будущем.

Так что с учетом этого, если вы захотите и можете позволить себе потратить время на изучение WPF, я бы это сделал. В противном случае я бы использовал Winforms.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...