Wpf это фреймворк или нет

Обновлено: 02.07.2024

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

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

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

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

643 1 1 золотой знак 6 6 серебряных знаков 16 16 бронзовых знаков Мне кажется тут удобство и дело привычки. У меня знакомый есть, до сих пор не может вникнуть в WPF, он для него не понятный, не удобный. Когда для меня наоборот все, я в WPF могу натворить по дизайну такое, что вряд ли когда либо сделаю на WinForm. Так же как не крути, приложения на WPF более требовательны к ресурсам компьютера, а иногда этого просто не требуется, "Долой красоту, главное что бы стабильно и быстро работало". Скажем какой нибудь софт для бухгалтерии или чего подобного. Пишут на WPF, ещё как, и больше, чем на WinForms. По метке WinForms 1565 вопросов, а по метке WPF 2270. Выводы делайте сами. Кто-то ещё пишет на WinForms?! Я последний раз видел WinForms в 2010 году. И то уже тогда был WPF и все задумывались о том чтобы на него перейти.

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

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

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

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

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


202k 25 25 золотых знаков 273 273 серебряных знака 501 501 бронзовый знак Многие когда-то программировали формочки мышкой в VB 5, VB 6, Delphi 3, Delphi 7, поэтому им WinForms сразу знаком, понятен и привычен @Андрей Именно. Абсолютно все ранние гуёвые фреймворки — тонкие обёртки на стандартными виндовыми контролами, которые существовали с версии Windows 1.0. Поэтому они все похожи как две капли воды. Со временем гуёвые фреймворки обрастали концепциями, которые не существуют в стандартных контролах (у тех даже нет выравнивания), но далеко они не уходили. WPF же — революционный шаг вперёд, принципиально иной подход к построению интерфейса. Пользоваться им "как WinForms" практически невозможно. Из-за этой пропасти всем лень. Но ведь и на Windows Forms гораздо удобнее программировать, используя привязки, а не только события. Но это удобнее далеко не в любой задаче. Поэтому никаких преимуществ у WPF нет, просто эту технологию больше пиарят. Поэтому WPF чисто для модников, для которых практичность не на первом месте. @Modus: Мне не кажется, что преимуществ у WPF реально нету. DataContext, позволяющий автоматизировать привязки, DataTemplate в ресурсах, позволяющий динамически выбирать UI по типу VM, возможность составлять списки с произвольным шаблоном элемента, конвертеры, привязки элементов друг к другу через конвертер, стили (!), возможность подменить шаблон у любого (!) элемента и положить контентом не текст, а произвольный кусок UI (например, внутрь кнопки или пункта меню) — это не убийственные преимущества? Для всего, сложнее чем одна-кнопка-и-одна-таблица, WinForms не кажется мне хорошим выбором.

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

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

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

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

47k 11 11 золотых знаков 74 74 серебряных знака 143 143 бронзовых знака 5,219 2 2 золотых знака 16 16 серебряных знаков 35 35 бронзовых знаков 47k 11 11 золотых знаков 74 74 серебряных знака 143 143 бронзовых знака 1,747 11 11 серебряных знаков 32 32 бронзовых знака

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

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

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.

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


Существует мнение, что развитие десктопной разработки остановилось в своем развитии и для этого есть несколько предпосылок. Одна из них – остановка, или даже лучше сказать стагнация, в самой базе, в визуальном фреймворке WPF. Значительных обновлений для него не было вот уже лет 5, как может показаться. Официальный тулкит давно не обновлялся, точнее с февраля 2010 года, т.е. вот как раз те самые 5 лет. При этом компании, специализирующиеся на кастом-компонентах, как например DevExpress и Telerik успешно выпускают обновления и составляют планы на будущее относительно WPF. Даже если вы ориентированы на новинки, то компоненты для WinRT все равно используют концепции и общую структуру XAML, который никуда не уходит.
Далее мы хотим представить причины, по которым WPF некоторые считают неактуальным, и опровержение этих причин.

Причины для беспокойства

Причин для беспокойства можно выделить с дюжину. Но не все они реально так страшны и существенны. Пройдемся кратко по основным.

Блог команды WPF давно не обновлялся.

Так же, как и у любой другой команды, у команды WPF есть свой блог, в котором по идее должны быть описаны планы и достижения команды. К сожалению, в блоге давно нет новой информации. Это может натолкнуть на мысли, что всех разогнали или что писать не о чем. Однако, это не так и блог стал обновляться 4 месяца назад и последняя запись появилась 20 дней назад. Более того, появился генеральный план развития фреймворка, а также краткие описания новых фич доступных с последними CTP.

Официальный WPF тулкит давно не обновлялся

Официальная страница WPF Toolkit на CodePlex не обновлялась с 2010 года. А это ведь когда-то была площадка для обкатки новых компонентов, которые открыто допиливались и в случае успеха вливались в основные релизы фреймворка. Такое положение дел так же может внушать подозрения о том, что ничего нового нам ждать не приходится и останется только закупать компоненты у больших компаний или что-то делать на коленке, долго и мучительно, если это не профильное направление вашей деятельности. Но неофициальный тулкит Extended WPF Toolkit живее всех живых и последний релиз пришелся на 13 февраля 2015 года. Т.е. вот на прошлой неделе был. Этот тулкит поддерживает Xceed, но вложения идут в опенсорс проект, а значит они видят будущее за ним. Титульный баннер однозначно выражает оптимизм по этому счету.


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

Сертификация по WPF

Нет интеграции с Win8+

Во время релиза WPF4, значительная часть улучшений была посвящена интеграции с Windows 7, однако этого не наблюдается с новыми операционными системами. Уже на носу Windows 10, а никаких новых фич связанных с возможностями ОС в WPF не наблюдается.

Новая стратегия Microsoft

В феврале 2014 года новым СЕО стал Сатья Надела, который пришел из «облачного» департамента, что может намекать. Сатья заменил Балмера, который как-то не стремился развиваться в сторону мобильного рынка и облачных технологий. Возможно в этом кроется причина такого резкого рывка Microsoft в сторону мобильной разработки и такого продвижения Azure. Сейчас компания движется под лозунгом «сначала облака и мобильность», что ведет к отходу от традиционной модели настольных приложений и активного использования WPF.

Windows Store

Публикация WPF приложений в Windows Store невозможна. Можно сделать приложение визитку, которое загрузит и установит полновесное приложение, но это выглядит как обходной путь. Однако Microsoft пытается сформировать некоторый условный рефлекс, как у Apple и Android пользователей, что все приложения устанавливаются только через Store. Это так же является некоторым звоночком не в пользу WPF.

Мобильный рынок

Это сумеречная зона для WPF, так как он никогда не задумывался как средство для мобильной разработки. Эту роль прочили Silverlight for Windows Phone, однако всем известна судьба этой затеи. Реалии мира же сейчас таковы, что все большее количество контента мы потребляем с помощью мобильных устройств и многие разрабатывают мобильные версии для основных программ. Если это ваш случай, то скорее всего вы будете использовать отличный от WPF стэк технологий.

Кроссплатформенность

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

Позитивные моменты для будущего WPF

Активная команда WPF

Команда WPF действительно проснулась и их блог стал обновляться.

Есть потенциал для разработки

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

Новые инструменты

Популярный инструмент Prism, набор инструментов и лучших практик разработки на WPF, обновился до версии 5. Далее, активно развивается неофициальный расширенный набор инструментов для WPF Extended WPF Toolkit, который обновился буквально пару дней назад. В разработке новых инструментов не уступают и флагманы типа DevExpress.

Два наиболее популярный MVVM фреймворка: MVVM Light Toolkit и Caliburn.Micro так же проявляют активность. Для первого последний чекин датируется 21 февраля 2015 года, для второго – 16 марта 2015 года. И это не единичные чекины раз в полгода, а регулярная работа.

Можно сказать что экосистема инструментария для WPF жива и эволюционирует, что особенно важно для бизнеса, потому что он не останется со своими проблемами один на один в случае чего.

Изменения в управлении


Инертность рынка ОС

Инертность рынка ОС и добро и благо. Сейчас для WPF это хорошо, потому что бизнес и частные пользователи не переходят мгновенно на новые версии ОС, по целому ряду веских причин: это стоит денег, это отнимает время, это всегда риск, и часто это просто бесполезно.

Для компаний миграция на новую ОС это всегда головная боль и проблемы. Необходимо убедиться в совместимости всех сервисов, всех своих наработок. Убедиться что вендоры могут предоставить соответствующих экспертов и поддержку, подготовить свой персонал. Вообще переход на новую ОС может составлять 2 года и более. На этом фоне выглядит несколько странным и интригующим заявление о том, что каждые 2 года Microsoft будет выпускать новые версии своих продуктов, включая ОС. За примером далеко ходить не надо, многие компании не переходят с семерки на 8 и 8.1 ожидая, вполне закономерно как дела будут с новой версией и не стоит ли перейти сразу на нее.

Инертность ALM

Не многие знают, что написать программу стоит немалых денег. Сначала в серии встреч со всеми заинтересованными сторонами, надо оценить, какое влияние имеет ПО на текущие процессы в общем бизнес-процессе. Надо найти ключевых пользователей и убедить их, что требуется обновление ПО. Затем новое ПО надо разработать, при этом старое должно работать как ни в чем не бывало. Новое приложение должно работать бок о бок со старым, чтобы можно было сравнить результаты и понять, что ничего не упущено и все работает как минимум на том же уровне, не хуже. Так же вовлекаются ребята их DB отделов, чтобы поработать с бэкапами, инженеры сети, чтобы настроить новые правила для файрволов и так далее.

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

WPF зрелая технология

Для многих разработчиков очевидно, что первая версия приложения отнимает наибольшее количество времени и сил. В таком ключе можно рассматривать выпуск WPF 3.0 и WPF 3.5. После победы над детскими болячками, приложения на WPF 4 уже стали «полными», разработчики стали уделять внимание быстродействию, что намекает на стабильность основной технологической базы. Наконец в версии 4.5 разработчики добавили еще украшательств и еще больше повысили производительность.

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

Line of Business (LOB) Application

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

Еще одной причиной, почему WinRT пока не может прийти на смену WPF – это то, что нет такого же инструментария. Например, таких вещей как ORM в духе NHibernate или EntityFramework, которые необходимы любому in-house приложению.

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

Интеграция с WinForms

За более чем 10 лет компании создали огромное количество приложений на WinForms и переделать их в один момент по другие технологии не представляется возможным. Огроным плюсом в этом случае является взаимная между WinForms и WPF возможность использовать компоненты друг друга и внедрять друг в друга. Таким образом миграция с одной технологии на другую может проходить постепенно и относительно безболезненно.

Насколько я знаю, пока что WinRT никак не может внедряться в WinForms компоненты, формы.

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


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

  • История пользовательских интерфейсов и как сделать UI\UX удобным для корпоративного пользователя. Через окна в облака.
  • Не создавайте медлительных зомби-приложений. Используйте Rx! На реальном примере. А также что вы недооценили в TPL?
  • EF-ом ли единым живы большие приложения?
  • Прототипирование приложений
  • Как написать толковые UT на пользовательский интерфейс. Реальный опыт разработки.
  • Холивар на тему полного и анемичного домена
  • И другие захватывающие истории!


Регистрируйтесь! До 23 марта действует специальная цена.

Существует две реализации WPF:

Этот обзор предназначен для новичков: в нем рассматриваются ключевые возможности и понятия WPF. Сведения о создании приложения WPF см. в разделе Учебник: создание нового приложения WPF.

Программирование с помощью WPF

  • Создание экземпляров классов
  • Настройка свойств
  • Вызов методов
  • Обработка событий

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

Разметка и код программной части

Затраты на разработку и обслуживание снижаются, так как разметка, определяющая внешний вид, не связана тесно с кодом, обуславливающим поведение.

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

разметку

XAML — это язык разметки на основе XML, который служит для определения внешнего вида приложения в декларативной форме. Обычно он используется для определения окон, страниц и пользовательских элементов управления, а также их заполнения элементами управления, фигурами и графическими элементами.

В приведенном ниже примере XAML используется для определения внешнего вида окна, содержащего одну кнопку.

Этот код XAML определяет окно и кнопку с помощью элементов Window и Button . Каждый элемент настраивается с помощью атрибутов, например атрибута Window элемента Title , определяющего текст заголовка окна. Во время выполнения WPF преобразует элементы и атрибуты, определенные в разметке, в экземпляры классов WPF. Например, элемент Window преобразуется в экземпляр класса Window , свойство Title которого является значением атрибута Title .

На рисунке ниже показан пользовательский интерфейс, который определяется кодом XAML из предыдущего примера.

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

Файл с кодом программной части

Основное поведение приложения состоит в реализации функции, реагирующей на взаимодействие с пользователем. Например, нажатие меню или кнопки и вызов бизнес-логики и логики доступа к данным в ответ. В WPF такое поведение реализуется в коде, связанном с разметкой. Этот код называется кодом программной части. В приведенном ниже примере показана обновленная разметка из предыдущего примера и код программной части.

Обновленная разметка определяет пространство имен xmlns:x и сопоставляет ее со схемой, которая добавляет поддержку для типов кода программной части. Атрибут x:Class используется для связывания класса кода программной части с этой конкретной разметкой XAML. С учетом того, что этот атрибут объявлен в элементе <Window> , класс кода программной части должен наследовать от класса Window .

Метод InitializeComponent вызывается из конструктора класса кода программной части для слияния пользовательского интерфейса, определенного в разметке, с классом кода программной части. ( InitializeComponent создается при построении приложения, поэтому реализовывать его вручную не нужно.) Сочетание x:Class и InitializeComponent гарантирует правильную инициализацию реализации при создании.

На рисунке ниже показан результат нажатия на кнопку.

Ввод данных и команды

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

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

Элементы управления

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

СОДЕРЖАНИЕ

Обзор

WPF использует XAML , язык на основе XML , для определения и связывания различных элементов интерфейса. Приложения WPF могут быть развернуты как автономные настольные программы или размещены как встроенный объект на веб-сайте. WPF стремится унифицировать ряд общих элементов пользовательского интерфейса , таких как 2D / 3D-рендеринг, фиксированные и адаптивные документы , типографика , векторная графика , анимация во время выполнения и предварительно обработанные мультимедиа. Затем эти элементы могут быть связаны и ими можно управлять на основе различных событий, взаимодействий с пользователем и привязок данных .

Библиотеки времени выполнения WPF включены во все версии Microsoft Windows, начиная с Windows Vista и Windows Server 2008 . Пользователи Windows XP SP2 / SP3 и Windows Server 2003 могут дополнительно установить необходимые библиотеки.

Microsoft Silverlight предоставляет функциональные возможности, которые в основном являются подмножеством WPF для предоставления встроенных веб-элементов управления, сопоставимых с Adobe Flash . 3D-рендеринг во время выполнения поддерживался в Silverlight начиная с Silverlight 5.

Функции

Direct3D

Графика, включая такие элементы рабочего стола, как окна, отображается с помощью Direct3D . Это позволяет отображать более сложную графику и настраиваемые темы за счет более широкого диапазона поддержки GDI и единообразного управления темами. Это позволяет Windows переносить некоторые графические задачи на графический процессор . Это снижает нагрузку на центральный процессор компьютера . Графические процессоры оптимизированы для параллельных вычислений пикселей. Это имеет тенденцию ускорять обновление экрана за счет снижения совместимости на рынках, где графические процессоры не обязательно такие мощные, как рынок нетбуков .

Акцент WPF на векторной графике позволяет масштабировать большинство элементов управления и элементов без потери качества или пикселизации , тем самым повышая доступность. За исключением Silverlight, интеграция Direct3D позволяет оптимизировать 3D-рендеринг. Кроме того, интерактивный 2D-контент может быть изначально наложен на 3D-поверхности.

Связывание данных

  • WPF имеет встроенный набор служб данных, позволяющий разработчикам приложений связывать данные в приложениях и управлять ими. Он поддерживает четыре типа привязки данных:
    1. один раз: когда клиент игнорирует обновления на сервере.
    2. один способ: когда клиент имеет доступ к данным только для чтения.
    3. два способа: где клиент может читать и записывать данные на сервер
    4. один способ источника: когда у клиента есть доступ только для записи к данным
  • Запросы LINQ , включая LINQ to XML , также могут выступать в качестве источников данных для привязки данных.
  • Связывание данных не влияет на их представление. WPF предоставляет шаблоны данных для управления представлением данных.
  • Набор встроенных элементов управления предоставляется как часть WPF и содержит такие элементы, как кнопка, меню, сетки и список.
  • Свойства зависимости можно добавить к поведению или прикрепленным свойствам, чтобы добавить настраиваемые свойства привязки.
  • Мощная концепция WPF - это логическое отделение элемента управления от его внешнего вида.
    • Шаблон элемента управления можно переопределить, чтобы полностью изменить его внешний вид.
    • Элемент управления может содержать любой другой элемент управления или макет, что обеспечивает высокую степень управления композицией.

    Медиа услуги

    • WPF предоставляет интегрированную систему для создания пользовательских интерфейсов с общими мультимедийными элементами, такими как векторные и растровые изображения, аудио и видео. WPF также предоставляет систему анимации и систему рендеринга 2D / 3D.
    • WPF предоставляет примитивы форм для 2D-графики, а также встроенный набор кистей, перьев, геометрии и преобразований.
    • Возможности 3D в WPF - это подмножество полного набора функций, предоставляемого Direct3D. Однако WPF обеспечивает более тесную интеграцию с другими функциями, такими как пользовательские интерфейсы, документы и мультимедиа. Это позволяет иметь трехмерные пользовательские интерфейсы, трехмерные документы или трехмерные носители.
    • Поддерживаются наиболее распространенные форматы изображений: BMP, JPEG, PNG, TIFF, Windows Media Photo , GIF и ICON.
    • WPF по умолчанию поддерживает видеоформаты WMV , MPEG и некоторые файлы AVI , но поскольку под ним работает проигрыватель Windows Media , WPF может использовать все установленные для него кодеки.

    Шаблоны

    • В WPF вы можете определить внешний вид элемента напрямую через его свойства или косвенно с помощью шаблона или стиля. В простейшем случае стиль представляет собой комбинацию настроек свойств, которые могут быть применены к элементу пользовательского интерфейса с одним атрибутом свойства. Шаблоны - это механизм для определения альтернативного пользовательского интерфейса для частей вашего приложения WPF. В WPF доступно несколько типов шаблонов (ControlTemplate, DataTemplate, HierarchicalDataTemplate и ItemsPanelTemplate).

    Шаблоны управления

    • В основе всех элементов управления пользовательского интерфейса в WPF лежит новая модель композиции. Каждый элемент управления состоит из одного или нескольких «визуальных элементов». Эти визуальные субэлементы превращаются в иерархическое визуальное дерево с помощью WPF и, в конечном итоге, обрабатываются графическим процессором. Поскольку элементы управления WPF не являются оболочками для стандартных элементов управления Windows, их пользовательский интерфейс можно радикально изменить, не влияя на нормальное поведение элемента управления.
    • Каждый элемент управления в WPF имеет шаблон по умолчанию, который определяет его визуальное дерево. Шаблон по умолчанию создается автором элемента управления и может быть заменен другими разработчиками и дизайнерами. Заменяющий пользовательский интерфейс помещается в ControlTemplate.

    Шаблоны данных

    Анимации

    Визуализация

    • WPF может иметь собственный доступ к коду и API-интерфейсам Windows Imaging Component (WIC), что позволяет разработчикам писать кодеки изображений для своих конкретных форматов файлов изображений.

    Последствия

    Документы

    • WPF изначально поддерживает документы с разбивкой на страницы. Он предоставляет DocumentViewer класс, предназначенный для чтения документов с фиксированным макетом. В FlowDocumentReader классе предлагает различные режимы просмотра , например, на странице или прокручивать , а также перекомпоновки текста , если область просмотра изменяется.
    • По умолчанию поддерживает документы XML Paper Specification .
    • Поддерживает чтение и запись документов с разбивкой на страницы с использованием Open Packaging Conventions .

    Текст

    • WPF включает ряд функций отрисовки текста, которые не были доступны в GDI . Это первый программный интерфейс Microsoft, предоставляющий разработчикам программного обеспечения возможности OpenType , поддерживающий шрифты OpenType, TrueType и OpenType CFF ( компактный формат шрифтов).
    • Поддержка типографских функций OpenType включает:
    • Цифры старого стиля (например, части глифа располагаются ниже базовой линии текста)
    • качающаяся варианта
    • Фракции
    • Надстрочный и подстрочный индекс
    • Обоснование на уровне строки
    • Несколько базовых показателей
    • Контекстные и стилистические альтернативы

    Совместимость

    • Windows Forms также возможно за счет использования из ElementHost и WindowsFormsHost классов.

    Альтернативный ввод

    • WPF поддерживает функции, связанные с цифровыми чернилами .
    • WPF 4.0 поддерживает мультисенсорный ввод в Windows 7 и более поздних версиях .

    Доступность

    • WPF поддерживает Microsoft UI Automation, позволяя разработчикам создавать доступные интерфейсы.
    • Этот API также позволяет автоматическим тестовым сценариям взаимодействовать с пользовательским интерфейсом.

    После успеха языков разметки для веб - разработки, WPF представляет Extensible Application Markup Language ( XAML ; / г æ м əl / ), который основан на XML . XAML разработан как более эффективный метод разработки пользовательских интерфейсов приложений. Конкретное преимущество XAML для WPF заключается в том, что XAML является полностью декларативным языком, позволяющим разработчику (или проектировщику) описывать поведение и интеграцию компонентов без использования процедурного программирования . Хотя редко бывает, что все приложение будет полностью построено на XAML, внедрение XAML позволяет разработчикам приложений более эффективно участвовать в цикле разработки приложений. Использование XAML для разработки пользовательских интерфейсов также позволяет разделить модель и представление, что считается хорошим архитектурным принципом. В XAML элементы и атрибуты сопоставляются с классами и свойствами в базовых API.

    Архитектура

    Архитектура WPF. Синие элементы - это компоненты Windows; коричневые - это компоненты WPF.

    WPF предоставляет систему свойств для объектов, которые наследуются от DependencyObject , которая знает о зависимостях между потребителями свойства и может запускать действия на основе изменений свойств. Свойства могут быть либо жестко закодированными значениями, либо выражениями, которые представляют собой определенные выражения, которые приводят к результату. Однако в первоначальной версии набор поддерживаемых выражений закрыт. Значение свойств также может быть унаследовано от родительских объектов. Свойства WPF поддерживают уведомления об изменениях , которые вызывают связанное поведение всякий раз, когда изменяется какое-либо свойство некоторого элемента. Пользовательские поведения можно использовать для распространения уведомления об изменении свойства на набор объектов WPF. Это используется системой макета для запуска пересчета макета при изменении свойств, тем самым раскрывая декларативный стиль программирования для WPF, в соответствии с которым почти все, от установки цветов и позиций до анимации элементов, может быть достигнуто путем установки свойств. Это позволяет писать приложения WPF на XAML , который является декларативным языком разметки, путем привязки ключевых слов и атрибутов непосредственно к классам и свойствам WPF.

    Элементы интерфейса приложения WPF поддерживаются как класс Visual объектов. Визуальные объекты предоставляют управляемый интерфейс для дерева композиции, которое поддерживается уровнем интеграции мультимедиа (MIL). Каждый элемент WPF создает и добавляет в дерево один или несколько узлов композиции . Узлы композиции содержат инструкции по визуализации, такие как инструкции по вырезанию и преобразованию, а также другие визуальные атрибуты. Таким образом, все приложение представляется как набор узлов композиции, которые хранятся в буфере в системной памяти. Периодически MIL проходит по дереву и выполняет инструкции по рендерингу в каждом узле, таким образом компонуя каждый элемент на поверхности DirectX, которая затем отображается на экране. MIL использует алгоритм рисования , при котором все компоненты визуализируются от задней части экрана к передней, что позволяет легко достигать сложных эффектов, таких как прозрачность. Этот процесс рендеринга аппаратно ускоряется с помощью графического процессора. Дерево композиции кэшируется MIL, создавая графику сохраненного режима , так что любые изменения в дереве композиции нужно только постепенно сообщать в MIL. Это также освобождает приложения от управления перерисовкой экрана; MIL может это сделать самостоятельно, поскольку имеет всю необходимую информацию. Анимации могут быть реализованы как изменения дерева композиции, запускаемые по времени. На видимой для пользователя стороне анимации указываются декларативно, путем установки некоторого эффекта анимации для некоторого элемента через свойство и указания продолжительности. Код программной части обновляет определенные узлы дерева через Visual объекты, чтобы представить как промежуточные состояния в указанные интервалы времени, так и конечное состояние элемента. MIL автоматически отобразит изменения в элементе. Все приложения WPF начинаются с двух потоков: один для управления пользовательским интерфейсом, а другой фоновый поток для обработки отрисовки и перерисовки. Рендеринг и перерисовка осуществляется самим WPF без какого-либо вмешательства разработчика. Поток пользовательского интерфейса содержит диспетчер (через экземпляр DispatcherObject ), который поддерживает очередь операций пользовательского интерфейса, которые необходимо выполнить (в виде дерева Visual объектов), отсортированных по приоритету. События пользовательского интерфейса, включая изменение свойства, влияющего на макет, и возникающие события взаимодействия с пользователем помещаются в очередь в диспетчере, который вызывает обработчики событий. Microsoft рекомендует, чтобы обработчики событий обновляли свойства только для отражения нового содержимого для реагирования приложения, при этом новое содержимое создается или извлекается в фоновом потоке. Поток рендеринга выбирает копию визуального дерева и обходит дерево, вычисляя, какие компоненты будут видимы, и отображает их на поверхностях Direct3D. Поток рендеринга также кэширует визуальное дерево, поэтому необходимо сообщать только изменения в дереве, что приведет к обновлению только измененных пикселей. WPF поддерживает расширяемую модель макета. Макет разделен на два этапа: Измерение ; и устроить . Мера фаза рекурсивно вызывает все элементы и определяет размер , который они будут принимать. В Аранжировки фазе, дочерние элементы рекурсивно расположены их родители, ссылаясь на алгоритм компоновки модуля макета в использовании.

    Инструменты

    Для разработки приложений Windows Presentation Foundation доступен ряд средств разработки.

    Инструменты Microsoft

    Сторонние инструменты

    Развертывание

    Модель развертывания WPF предлагает варианты как автономных, так и браузерных приложений XAML (XBAP, произносится как «ex-bap»). Модель программирования для создания приложений любого типа аналогична.

    Автономные приложения - это те, которые были локально установлены на компьютере с помощью такого программного обеспечения, как ClickOnce или Windows Installer (MSI), и которые запускаются на рабочем столе. Автономные приложения считаются полностью доверенными и имеют полный доступ к ресурсам компьютера.

    Internet Explorer

    Поддержка Firefox

    Microsoft Silverlight

    Silverlight (под кодовым названием WPF / E) - устаревший плагин для кроссбраузерности, который содержал технологию на основе WPF (включая XAML), которая предоставляла такие функции, как видео, векторная графика и анимация, для нескольких операционных систем, включая Windows 7 , Windows Vista , Windows XP. и Mac OS X . Microsoft разрешила ограниченному числу сторонних разработчиков работать над портами для определенных дистрибутивов Linux . В частности, он был предоставлен как надстройка для Mozilla Firefox , Internet Explorer 6 и выше, Google Chrome 42 и ниже и Apple Safari .

    Читайте также: