Подтвердить что ты не робот

Лучше ли использовать WPF поверх Windows Forms?

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

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

EDIT: приложение представляет собой приложение, связанное с 3D, редактор, например modo:

Image created using the 3D painting program modo.

4b9b3361

Ответ 1

---- ИЗМЕНИТЬ 2 -----

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

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

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

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

---- EDIT -----

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

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

Codeproject arcticle при вступлении в D3DImage

Ответ 2

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

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

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

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

Удачи!

Ответ 3

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

Я использовал 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, и ожидают, что они будут доступны во всех приложениях, которые они используют. Это достигнет точки, когда что-либо, что их не поддерживает, будет чувствовать себя неуклюжим, менее пригодным для использования и, похоже, меньше стоит тратить деньги. (Я вижу, что Touch-интеграция является наиболее очевидным примером этого. Хотя есть сенсорные решения, которые зажимают монитор и эмулируют мышь, на любом компьютере технология сенсорного экрана прошла очень долго, а 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 хранятся в течение многих лет, важно помнить, что время меняется, и все мы должны измениться вместе с ними.

Ответ 4

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

Кроме того, есть и другие преимущества, которые WPF имеет над формами:

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

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

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

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

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

Ответ 9

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

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

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

Ответ 10

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

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