В чем разница между WPF и WinForms?
===================================

Я программирую простые приложения для Windows. Я нене нужна поддержка БД. Зачем мне использовать WPF вместо WinForms?

Учить.Чтобы иметь больший (то есть любой) контроль над внешним видом вашей программыЧтобы получить выгоду от более простого связывания данных, триггеров, стилей(Я нене вижу, какое отношение имеет к этому поддержка БД)



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

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

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

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



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



**Преимущества и недостатки WPF перед winforms:**

Возможность создавать очень богатые интерфейсы относительно легко.Более простая анимация и спецэффектыСобственная масштабируемостьМощная укладка и структура кожиЛегко создать собственный внешний видПоддерживает ли Windows FormsБудущая технология для разработки приложений VistaВозможность повторного использования существующего кодаВозможна высокоразвитая привязка данныхДекларативный и процедурный кодТребуется .NET Framework 3.0По сравнению с Windows Forms, все еще в разработкеТребуется Dx9 совместимая видеокарта для продвинутой графикиОднако у WPF есть свои недостатки, в которых WinForms стоит на первом месте:

WPF»Набор встроенных элементов управления гораздо более ограничен, чем у WinForms.Там'Более широкая поддержка в стороннем пространстве управления для WinForms. (Тот'меняется, но на данный момент WinForms имеет большую поддержку в сообществе.) 3.WPF не будет работать на Windows 2000 или ниже.Обширная документация, которую можно найти в интернете для форм WINМножество примеров для WIN формРазработка собственного внешнего вида в приложении - это много работы. 7.C # работает медленнее. Это несколько заботится при использовании WPF, хотя в настоящее время запуск приложения WPF все еще немного медленный. Однако после запуска программы анимационные эффекты становятся очень плавными.

Один очевидный ответ заключается в том, что WPF предлагает более богатый пользовательский интерфейс, чем WinForms, позволяя анимацию, даже 3D, в пользовательском интерфейсе, например.

С точки зрения разработки это имеет большое значение для обеспечения отделения пользовательского интерфейса (в XAML) от бизнес-логики (в VB.NET или C #), что всегда хорошо.

Поиск Google для "WPF vs WinForms " поднимает много страниц, которые обсуждают эту проблему. Я выиграл'повторить все свои выводы здесь, но[эта страница](https://mdavey.wordpress.com/2007/09/05/wpf-vs-windows-forms/) поднимает некоторые интересные моменты:

Привязка данных в WPF превосходит возможности Windows Forms.Бизнес-логика UI и C # может быть четко разделена в WPFРаскадровкаШаблоны данных / контроля - гораздо чище, чем все, что может предложить Windows Forms.Стили - круто и просто. Все ваши кнопки в приложении можно легко стилизовать, чтобы они выглядели одинаково.Даже если дизайнер VS сломается, его легко закодировать на XAML.Виртуализация пользовательского интерфейса - яу нас есть сетки с 100К строк, отсчитывающие от движущегося рынка. Производительность была бы ужасной, если бы неT для визуализации пользовательского интерфейса, которые приходят бесплатно.3D поддержка.Ничего научного, но разработка пользовательского интерфейса быстрее в WPF - возможно, это просто потому, что приложение WPF выглядит круче в конце итерации, или, может быть, потому, что разработка действительно быстрее.Я могу добавить инженера User Experience в свою команду, и без знания C # он может творить чудеса в Expression Blend и придать приложению для фронт-офиса торговую перестройку, которая гарантированно выиграет у бизнес-пользователей.

Если вы хотите иметь богатый пользовательский интерфейс, такой как изображение, размещенное в вашем[предыдущий вопрос](https://stackoverflow.com/questions/1337230/setting-form-to-look-like-this-image)ЯЯ рекомендую пойти с WPF. Помимо создания приятного на вид приложения, оно 'Также технология, которую Microsoft будет продвигать в будущем. Там'Почти нет новых разработок для Winforms.



WPF является текущей платформой для разработки приложений Windows для настольных ПК. Это современная, продвинутая, аппаратно-ускоренная среда для разработки приложений, которые поддерживают разделение задач. Он поддерживает расширенный рендеринг 2D-векторной и 3D-графики, предоставляя огромный спектр возможностей для создания многофункциональных, интерактивных и качественных пользовательских интерфейсов.

Winforms, с другой стороны, обеспечивает базовую платформу для разработки "классический» Приложения для Windows со стандартным интерфейсом. Он не предлагает богатых аппаратно-ускоренных, векторных 2D и 3D-возможностей, которые предлагает WPF. Приложения Winforms имеют тенденцию иметь намного большую связь между поведением приложения и пользовательским интерфейсом (представление), который представляет собой менее гибкую платформу для разработки приложений.

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



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

Кроме того, из-за XAML у вас есть больше возможностей для "делать вещи "декларативный или программный, или смесь того и другого.

Microsoft больше не занимается активной разработкой winforms, они активно продвигают WPF и не без причины.

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

Шаблон MVVM уже упоминался в одном из комментариев, это позволяет проводить реальное юнит-тестирование или тестирование на основе GUI для вашего кода, то естьбольшой выиграть, по моему опыту.