Xaml или windows forms

VIII Международная студенческая научная конференция Студенческий научный форум — 2016

СРАВНИТЕЛЬНЫЙ АНАЛИЗ ГРАФИЧЕСКИХ СИСТЕМ WPF И WINFORMS

Windows Forms – графическая система в составе .Net Framework. Представляет собой обертку вокруг Win32 API в управляемом коде. Считается заменой графической системы MFC, написанной под C++ и имеет сложную модель для разработки интерфейса программного продукта.

Windows Presentation Foundation – это графическая система в составе .Net Framework 3.0 и более поздних версий. Спроектирована под влиянием технологий HTML и Flash и использует аппаратное ускорение.

Изменения графических систем отображения Windows

Разработка графического интерфейса для Windows-приложений основывается на двух компонентах операционной системы:

User32 – содержит основные элементы окна;

GDI/GDI+ — предоставляет функционал для рисования фигур, текста.

Эволюция графических систем прошла путь от сложной системы MFC до разработки на языках .Net и WinForms. Но как бы не совершенствовались технологии разработки, они всё равно опирались на User32 и GDI/GDI+, а значит, не смогли преодолеть фундаментальные ограничения базовых компонентов.

Для решения этой проблемы была разработана технология WPF. Её главное отличие от WinForms в том, что для отображения графических компонентов используется не GDI/GDI+, а DirectX – технология, разрабатываемая Microsoft для создания игр в тесном сотрудничестве с изготовителями видеокарт, и по этой причине имеет поддержку аппаратного ускорения.

И хоть от компонента User32 не отказались, его использование сводится к задачам не касающихся отображения графического интерфейса, например, определение положения окна. Все задачи, связанные с рисованием возложены на DirectX.

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

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

Рассмотрим наиболее существенные изменения:

Аппаратное ускорение. Как уже было сказано, DirectX разрабатывался в сотрудничестве с изготовителями видеокарт. Однако, просто мощной видеокарты недостаточно, необходима программная поддержка. Именно по этой причине с 2004 года изготовители видеокарт при написании драйверов следуют новым инструкциям от Microsoft.

Аппаратная поддержка предоставляется всем приложениям. В момент запуска анализируются возможности видеокарты и на основание полученных результатов присваивается уровень визуализации от 0 до 2.

Уровень 0 – отсутствие аппаратной поддержки.

Уровень 1 – частичная аппаратная поддержка.

Уровень 2 – полная аппаратная поддержка.

Декларированный пользовательский интерфейс. Еще одно нововведение в WPF это язык разметки XAML, являющийся подмножеством XML. Хотя весь пользовательский интерфейс можно описать на языке C# (или другом языке .Net), технология WPF использует другой подход, следуя которому интерфейс описывается на языке XAML, а поведение программы записывается в коде. Теперь дизайнер и разработчик могут работать параллельно и не вникать в работу друг друга.

Стили. В основу идеи отрисовки пользовательского интерфейса легла технология HTML. Переход к разработке на XAML дал возможность выводить свойства элементов окон в отдельные стили, по аналоги с CSS. И теперь изменить внешний вид окон стало ее проще, достаточно просто заменить файл со стилями.

Модель рисования. Если в WinForms рисовали пиксели, то в WPF работают с примитивами – это уже готовые базовые фигуры и прочие графические элементы. Кроме того, имеется встроенная поддержка трехмерно графики.

Анимация. В WinForm для того, чтобы форма отрисовала себя, необходимо использовать таймеры. При разработке технологии WPF в Microsoft пошли другим путем и дали ей поддержку анимации.

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

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

Читайте также:  Linux нет сетевого интерфейса

Приложения на основе страниц. Можно строить веб-подобные приложения на основе страниц, что дает возможность пользоваться навигацией.

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

Независимость от разрешения. WPF берет на себя компоновку элементов интерфейса подстраивая его под разные разрешения.

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

Заключение

Исходя из стратегии развития Microsoft, можно предположить, что технология WPF будет развиваться и дальше. Например, эта технология используется для написания приложений в стиле Metro.

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

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

МакДональд, Мэтью. WPF 4: Windows Presentation Foundation в .Net 4.0 с примерами на C# 2010 для профессионалов. : Пер. с англ. – М. : ООО «И.Д. Вильямс», 2011. – 1024 с. : ил. – Парал. тит. англ.

C#. Windows Forms или WPF? Что выбрать?

TechNOIR
> Разница кардинальная вообще в плане написания кода между WPF и WF?

На WPF можно писать как на WinForms, но лучше пользоваться преимуществами биндигов и MVVM-архитектуры. Так что если писать ХОРОШО — то да, разница будет.

1 — если смотреть в будущее (вин10) и метить на витрину магазина МС — еще лучше сразу UWP

3 — если метить на трудоустройство в корпоративный сектор — все популярные библиотеки компонентов .net, типа DevExpress, Telerik, Syncfusion и тд — дают триалы, не грех поиграть (там и формы, и впф и увп, и веб..)

отдельно про Syncfusion — у них есть хитрая лицензия для практически не ограниченного бесплатного использования, даже коммерческого в каких то пределах (но подробности уже у них на сайте ищите)

если чисто для десктопа — формы+мордочки проще и мало в чем уступают, а работа с треем по дефолту доступна именно в формах

минус и форм и впф — встроенный браузер — это IE (тут отвечал подробно — придется осваивать или CEF# или GeckoFX, новичку это будет сложно)

. а в UWP — уже Edge, там все гораздо веселее

так что нюансы свои есть везде, стоит пробовать все, а по мере понимания уже выбирать платформу исходя из особенностей задачи

вот статья от крутого эксперта, первые два пункта как раз вам по теме почитать.. статья ооочень старая, но суть далеко не все «гуру» знают даже сегодня ;))

Что изучать: WinForms или WPF?

Вот скажите, как это понимать, когда я только начал читать книги, мне писали «Начинайте с консольных приложений». Потом когда я прошёл этот курс, в другой книге уже начали говорить о WinForms, и сейчас я начал читать другую книгу, там автор вообще пишет:

Зачем писать под WinForms, ведь её элементы почти не менялись за последние 10 лет, учите лучше WPF

Я сейчас вообще как ёжик в тумане. Что учить? На чём остановиться? Что ждёт дальше? Может быть, я поучу WPF, а в другой книге уже будут говорить о новом более красочном написании приложений? Можете помочь распутаться и всё расставить по полочкам. пожалуйста.

Читайте также:  Moving from windows to linux

4 ответа 4

Если Вас интересует программирование desktop-приложений под Windows, то лучше остановиться на WPF, так как:

  • это просто самая новая технология на данный момент
  • использует 3D-ускоритель для отрисовки интерфейса
  • ну и готовых возможностей по «украшению» интерфейса здесь гораздо больше

Хотя, если Вы будете использовать WinForms, приложения будут также отлично работать, так что выбор за Вами.

Насчёт того что ждёт дальше, то до выхода Windows 8 нкаких изменений не планируется. Но как обещают в Microsoft, после её выхода появится возможность разрабатывать интерфейс desktop-приложений используя HTML+CSS+JS.

Да, смотря что ты хочешь создавать. WPF больше подходит для крутых компов, где стоит минимум XP, с .NET 3.0. Библиотека тяжелая, но в Windows Vista уже стоит по умолчанию. Но за эти неудобства WPF дает хорошие преимущества почти во всем, но только на Windows. WindowsForms проектировать можно и даже предпочтительнее, у него есть следующие преимущества над WPF (сколько помню, столько и напишу)

  1. SDI и MDI приложения (хотя есть библиотеки для эмуляции)
  2. легче организовывать интерфейс OpenGL, DirectX
  3. Теоретически кроссплатформенно за счет наличия MONO Framework
  4. GDI+ легче в обращении (но медленнее), чем накрученная render-система в WPF
  5. Вопреки распространённому заблуждению, поддерживают и полупрозрачные окна

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

Лично я (правда, вместе с Microsoft) порекомендую приступать к изучению UWP, Universal Windows Platform. Microsoft усиленно (но, к сожалению, не слишком то эффективно) проталкивает эту технологию, и, судя по всему, будет проталкивать ее еще определенное время, пока в очередной раз не сменится top management.

Опять-таки, программирование для WPF и UWP имеет много общего, так, что освоив UWP, вы без особого труда сможете писать и стандартные Windows приложения, а не только совместимые с Microsoft Store.

Кроме того, умение программировать UWP приложения привлекательно еще в чисто практическом смысле: освоив это, вы сможете опубликовать свое приложение в магазине, и сделать его доступным (потенциально) сотням миллионов пользователей. Не факт, конечно, что ваше приложение будет пользоваться хоть каким-то успехом, но уж несколько сотен закачек получите по любому. А работа с реальным проектом, и реальной отдачей — это лучшая практика для начинающего программиста, на порядки полезнее выполнения «стандартных» упражнений из учебника, уж поверьте мне на слово!

Почему все пишут приложения на WinForms если WPF лучше? [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.

Закрыт 3 года назад .

Очень часто на этом форуме встречаются вопросы которые начинаются таким образом

Я лично пробовал писать на Win Form и на WPF, и, как мне показалось, WPF более точный, более красивый в плане дизайна UI элементов. К тому же, в комплекте в WPF идёт замечательнейший язык Xaml, с которым работать намного легче чем с C# кодом внутри WinForms.

В связи с этим и задаюсь вопросом: какие преимущества есть у Win Form перед WPF и почему многие пишут на Win Form, хотя у них устарелый дизайн и они не поддерживаются?

4 ответа 4

У WPF и правда масса преимуществ перед WinForms. Особенно серьёзным преимуществом я бы назвал понятие привязки ( Binding ) и DataContext , которые радикально облегчают написание правильно структурированных программ, в которых представление отделено от модели, бизнес-логики и контента.

(Не то, чтобы на WinForms невозможно было писать правильно, это намного сложнее, и требует ручной работы.)

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

Читайте также:  Windows как удалит users

Тем, у кого есть опыт программирования на MFC или похожих UI-фреймворках, намного легче перейти на практически аналогичный WinForms, чем учить новые (хотя бы и более удобные и продуктивные) концепции, которые помогают лёгкому, удобному программированию на WPF.

Думаю, именно это является основной причиной того, что WinForms всё ещё существует.

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

  • Декларативное программирование, web подобная модель компоновки.
  • Независимость от разрешающей способности, аппаратное ускорение, поддержка мультисенсорного ввода.
  • Стили, триггеры, шаблоны, анимация, аудио и видео, команды, мощная система привязки, маршрутизируемые события.
  • Продвинутые возможности для рисования.
  • Приложения со страничной организацией.

и куча всего. Кроме того идеи, принципы и философия, которые положены в основу данной технологии, мне очень импонируют, близки и симпатичны. При этом я не являюсь каким-то ярым противником WinForms или фанатиком WPF, но просто если на секунду вдуматься и поразмыслить чего бы стоило сделать на «формах» то что в WPF реализуется минут за 5 или 10, невольно понимаешь всю мощь и те возможности, которые эта технология предоставляет.

При этом как все мирское, WPF не идеальна и не лишена недостатков, но просто плюсов все-равно больше и это факт.

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

По поводу устарелого дизайна, я вас не понял.

По поводу поддержки Win Forms мне кажется она никуда не делась, в этом можно убедиться почитав новости про Visual Studio 2017 и .net 4.7.

Лично мои наблюдения:

WPF говорит от потрясающем быстродействии в отрисовке элементов на экране благодаря работе на DirectX. У меня комп прекрасен всем — и CPU и GPU, но, по факту, отрисовка на экране у Win Forms гораздо быстрее (GDI тоже на месте не стоит).

Контрол DataGrid на WPF крайне сырой(по крайней мере пару лет назад был). Это самый важный контрол для представления данных вообще. Он должен быть очень универсальным, именно такой он в Win Forms, но не в WPF. Для виртуализации данных в DataGrid (WPF) можно использовать только виртуализацию самого источника данных через DataSource.

В Win Forms с DataGridView можно делать буквально все, что только угодно благодаря старому доброму механизму событий(CellVlueNeeded и CellValueFormating), причем очень просто (ну и DataSource тоже на месте).

Кстати, может кто то подскажет, появился способ в DataGrid поставить програмно фокус в строку номер N не прибегая к коду в 30 строк с применением рефлексии?

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

Для бизнес-приложений важно как раз все остальное, эти приложения люди используют долгое время, по многу часов в день. Функционал их сложен и, как правило, нестандартен. Поэтому их интерфейс должен быть максимально функциональным и не оттягивать внимание на самого себя. Человек не должен уставать от пестрого и мультяшного интерфейса.

В пользу WPF скажу только, что сам принцип построения интерфейса в нем очень интересен тем, что похож на таковой в интернет-страницах. Это очень интересно, но пока сыро (до сих пор! Когда был впервые представлен WPF!?). И да, я не обожаю XAML.

Оцените статью