Windows presentation foundation что это такое
Если при создании традиционных приложений на основе WinForms за отрисовку элементов управления и графики отвечали такие части ОС Windows, как User32 и GDI+, то приложения WPF основаны на DirectX . В этом состоит ключевая особенность рендеринга графики в WPF: используя WPF, значительная часть работы по отрисовке графики, как простейших кнопочек, так и сложных 3D-моделей, ложиться на графический процессор на видеокарте, что также позволяет воспользоваться аппаратным ускорением графики.
Преимущества WPF
Что вам, как разработчику, предлагает WPF?
Независимость от разрешения экрана : поскольку в WPF все элементы измеряются в независимых от устройства единицах, приложения на WPF легко масштабируются под разные экраны с разным разрешением.
Новые возможности, которых сложно было достичь в WinForms, например, создание трехмерных моделей, привязка данных, использование таких элементов, как стили, шаблоны, темы и др.
Хорошее взаимодействие с WinForms , благодаря чему, например, в приложениях WPF можно использовать традиционные элементы управления из WinForms.
Богатые возможности по созданию различных приложений: это и мультимедиа, и двухмерная и трехмерная графика, и богатый набор встроенных элементов управления, а также возможность самим создавать новые элементы, создание анимаций, привязка данных, стили, шаблоны, темы и многое другое
Аппаратное ускорение графики - вне зависимости от того, работаете ли вы с 2D или 3D, графикой или текстом, все компоненты приложения транслируются в объекты, понятные Direct3D, и затем визуализируются с помощью процессора на видеокарте, что повышает производительность, делает графику более плавной.
Создание приложений под множество ОС семейства Windows - от Windows XP до Windows 10
В тоже время WPF имеет определенные ограничения. Несмотря на поддержку трехмерной визуализации, для создания приложений с большим количеством трехмерных изображений, прежде всего игр, лучше использовать другие средства - DirectX или специальные фреймворки, такие как Monogame или Unity.
Также стоит учитывать, что по сравнению с приложениями на Windows Forms объем программ на WPF и потребление ими памяти в процессе работы в среднем несколько выше. Но это с лихвой компенсируется более широкими графическими возможностями и провышенной производительностью при отрисовке графики.
Архитектура WPF
Схематически архитектуру WPF можно представить следующим образом:
PresentationFramework.dll : содержит все основные реализации компонентов и элементов управления, которые можно использовать при построении графического интерфейса
PresentationCore.dll : содержит все базовые типы для большинства классов из PresentationFramework.dll
WindowsBase.dll : содержит ряд вспомогательных классов, которые применяются в WPF, но могут также использоваться и вне данной платформы
Unmanaged API используется для интеграции вышележащего уровня с DirectX:
milcore.dll : собственно обеспечивает интеграцию компонентов WPF с DirectX. Данный компонент написан на неуправляемом коде (С/С++) для взаимодействия с DirectX.
WindowsCodecs.dll : библиотека, которая предоставляет низкоуровневую поддержку для изображений в WPF
Еще ниже собственно находятся компоненты операционной системы и DirectX, которые произвоят визуализацию компонентов приложения, либо выполняют прочую низкоуровневую обработку. В частности, с помощью низкоуровневого интерфейса Direct3D, который входит в состав DirectX, происходит трансляция
Здесь также на одном уровне находится библиотека user32.dll . И хотя выше говорилось, что WPF не использует эту библиотеку для рендеринга и визуализации, однако для ряда вычислительных задач (не включающих визуализацию) данная библиотека продолжает использоваться.
История развития
А как же MAUI?
MAUI — абстракция над нативными UI-фреймворками.
Собственно, на винде это будет абстракцией над WinUI. У Xamarin.Forms есть поддерживаемая сообществом реализация поверх WPF.
Аналогичным образом ReactNative for Windows так же является абстракцией поверх WinUI. На нем, кстати, написан магазин на Xbox.
Application Models
Два вышеописанных системных API в данный момент подразумевают две разных модели жизненного цикла приложений. Классическая модель — приложению можно почти всё, оно может залезть почти куда угодно, читать что угодно, прятать окна и свою деятельность. С одной стороны — это позволяет делать различные удобные штуки вроде Punto Switcher, или сворачивание в трей по закрытию окна (вопреки ожиданиям, это не стандартное поведение в Windows). С другой стороны, это развязывает руки любым троянам.
И это было одной из причин, почему для приложений, работающих с WinRT, за основу была взята модель из мобильных платформ — изолированные приложения с контролируемым системой жизненным циклом. Другой из озвученных причин является большая энергоэффективность мобильного подхода. Всё же значительное количество ПК — ноутбуки. Вылилось это в повсеместные ограничения, привязку времени жизни приложения и времени жизни его основного окна (пока-пока сворачивание в трей). А также сильные ограничения работы в фоновом режиме. На размен давались различные фоновые задачи, контролируемые системой, и легальные способы интеграции в систему (системные контракты, такие как Share UI). В Microsoft посчитали, что за неполные 9 лет за счет таких интеграций появилось около 40 возможных точек входа в приложение. В какой-то момент даже появилась возможность делать консольные приложения, работающие поверх WinRT.
Стоит так же отметить, что эти две модели не изолируют Win32 и WinRT API друг от друга. В UWP приложения всё так же можно подключать Win32-библотеки, пока это не открывает путь за пределы песочницы. Из Win32 можно дергать WinRT API, но для большей его части надо получить AppIdentity, до недавнего времени это означало, что приложение придётся запаковать и оно станет чуть более изолированным.
И, пожалуй, именно тут надо вспомнить про UWP (Universal Windows Platform). Технически это название для реализации Windows Runtime в Windows 10+. Дело в том, что Windows Runtime в телефонах и Windows Runtime в Windows 8 отличались настолько, что для них нужно было делать отдельные сборки приложений (даже для одной архитектуры процессора). С появлением Windows 10, ОС и рантайм допилили до того состояния, когда 1 сборка приложения может запускаться и на телефоне (тогда они ещё были), и на ПК. Так же к этому списку добавились XBox, IoT, Hololens и Teams (большая интерактивная "маркерная доска")
На практике, под сокращением UWP часто понимают именно UWP-приложения.
WPF Series: Intro aka Введение
Года 3 назад, обсуждая Windows Forms с другом, я жаловался на то что неудобно использовать Windows Forms для вывода видео и музыки, а друг о том, что ему неудобно создавать свои контролы, а также формировать тулбары.
Жизнь научила меня изучать теперь сначала рынок, ведь даже самое красивое и правильное приложение может быть не оценено, если пользователю нужно совершать телодвижения, которые могут вызвать у него от сведения руки от нажатий кучи ненужных кнопок в диалогах программ до того, что ему нужно потратить дополнительный пенни для запуска вашей программы.
Спустя полгода, а точнее прошлой весной, я слушал великолепные отзывы о технологии WPF от своего товарища, у него была одна проблема: 80% возможностей он так и не смог раскрыть, т.к. нормальная книга появилась летом (из тех, где подробно и довольно в доступной форме рассказывается о технологии), а до этого можно было почерпнуть информацию только из блогов, в коих, зачастую, многое упускалось из вида…
Наслушавшись его, и умудрившись опыта, я сначала начал читать книгу, которая обновилась к этому времени, вместе с фреймворком до версии 3.5. Многое ускользало и пока продолжает ускользать от моего понимания, но теперь есть куда копать: западные блоггеры-программисты, раскусив плод WPF, застрочили как из пулемета, да и наши начинают догонять.
Так жив ли больной?
UWP, как подсистема винды, никуда не денется в ближайшее время. Это всё ещё основной вектор развития API системы. Для UWP-приложений, которые нацелены только на десктоп, уже настало время планировать портирование на Windows App SDK. Недавно выпущенная версия 0.8 уже допускается в Microsoft Store. Если же приложение должно работать и на других платформах (Xbox, Hololens и т. д.), то тут придется ждать следующего года. Но рано или поздно, таки придется переехать на Windows App SDK.
Касательно классических приложений, покуда вам не нужны новые фичи платформы (пуши, возможность поделиться в ваше приложение, новый богатый UI и т. п.), то делать в общем-то тоже ничего не надо.
Если писать новое приложение, то стоит оценить Windows App SDK в текущем его состоянии. И возможно писать на нём.
Project Reunion он же Windows App SDK
Собственно, посмотрев на это обилие фреймворков (ещё и ввязавшись зачем-то в ReactNative), и выслушав жалобы разработчиков, в мае 2020 Microsoft анонсировала объединение подходов. Разработчики Windows Forms и WPF хотят писать стильные/модные/молодёжные приложения, получить доступ к новому API (в том числе различным системным триггерам, которые бывают довольно удобны). UWP-разработчики хотят получить больший доступ к системе и более простые способы распространения приложения, так как сейчас мимо стора распространять приложение не просто.
Собственно, WinUI 3.x является частью решения. Берём графический фреймворк от UWP-приложений, насаживаем его на жизненный цикл классических приложений. И все счастливы.
На самом деле, все конечно сложнее. И что за монстр Франкенштейна в итоге получится мы узнаем уже в конце года. Впрочем начать знакомиться можно уже сегодня.
WPF 4
Нововведения в WPF 4
Я напишу отдельную статью, которая опишет важные изменения, которые грядут в WPF и Silverlight конструкторах в VS 2010.
Элементы управления
Элементы управления для построения богатых приложений
WPF 4 добавляет разнообразные элементы управления, чтобы создавать бизнес-приложения еще быстрее и проще. Новый, богатый набор элементов управления включает такие LOB-необходимые элементы управления, как DataGrid, DatePicker и Calendar. Данные новые элементы управления на 99% поведенчески и API совместимые с их Silverlight аналогами, позволяя разработчику создавать совместимые веб- и клиентские приложения, оптимизируя технологический процесс благодаря повторному использованию Silverlight и WPF кода.
Хитрые приёмы
Мы также выпускаем набор из восьми элементов управления, называемый «WPF Bag O’ Tricks». Набор включает в себя: AnimatingTilePanel, ColorPicker, InfoTextBox, ListPager, NumericUpDown, Reveal, TransitionsPresenter, TreeMapPanel.
Windows 7 и элемент управления Office Ribbon
Новый WPF элемент управления Ribbon будет доступен, почти сразу, после релиза WPF 4. Он поддерживает все стандартные возможности, с которыми знаком конечный пользователь: закладки и группы, динамическое изменение размеров, панель быстрого доступа, меню приложения, закладками, зависящими от контекста, горячими клавишами и многое другое.
WPF версия Ribbon будет обладать полноценной расширяемостью для соответствия изменениям в руководстве в следующих релизах. Ограниченная CTP версия доступна уже сегодня.
Графика
Кэшированное построение приложений
Огромный выигрыш в производительности возможен с новой возможностью WPF4 — Cached Composition, которая позволяет приложениям кэшировать произвольные содержимое, включая «живые» и полностью интерактивные элементы управления, векторную геометрию, растровые изображения, хранящиеся в видео памяти и т.п. Поместив единожды элементы в кэш, он могут быть произвольно преобразованы, анимированы, управляемы, к ним можно применить Effects, без нужды перерисовывать закэшированные элементы.
Все это приводит к сбережени CPU и GPU от перерисовки содержимого и позволяет GPU перерисовывать напрямую из кэша. Кэш понимает «грязные» области, поэтому мигающй курсор в закэшированном текстовом блоке, например, должен будет перерисовать только курсор между фреймами. Появилась даже новая кисть, которая использует «умный» кэш, фактически это VisualBrush с улучшенной производительностью.
Поддержка третьих пиксельных шейдеров
WPF основан на поддержке популярного ShaderEffect, впервые представленного в WPF 3.5 SP1, который позволяет создавать эффекты, используя пиксельные шейдеры 3-ей версии. PS 3.0 более сложный, чем PS 2.0, что дает возможность создавать неотразимые эффекты на поддерживаемом оборудовании.
LayoutRounding
WPF 4 переняла свойство UseLayoutRounding, представленное в Silverlight 2. Движок макета зачастую рассчитывает подпиксельные координаты расположения. Это приводит к артефактам при прорисовке, когда элемент расположен на стыке подпиксельных границ и сглажен над несколькими физическими пикселями.
UseLayoutRounding заставит движок макета располагать элементы по всем границам пикселя, следовательно, убирая большинство артефактов прорисовки, вызванной данной проблемой, что позволяет создавать чистый и чёткий UI по умолчанию.
Функции для облегчения анимации
Дискретная, линейная и сплайновая анимация уже поддерживается предыдущими версиями WPF. WPF 4 представляет новый концепт «Easing Functions», которые позволяют разработчикам создавать различную анимацию. Например, пружинистые движения или добавить упреждение в анимацию. Функции упрощения (Easing Functions) определяют способ анимации от начала и до конца. Встроенные функции упрощения предоставляют спектр режимов в анимации: круговой, экспоненциальной, эластичной и пружинистой. Функции упрощения спроектированы легко расширяемыми, позволяя разработчикам создавать собственные. Благодаря данному нововведения, дизайнеры могут без усилий создавать плавную и органичную анимацию.
CleartypeHint
Новое добавленное свойство CleartypeHint позволяет разработчикам приложений включить высококачественную прорисовку Cleartype текста, когда во многих ситуациях он был заранее отключен. Такие ситуации включают в себя текст в наслоившихся окнах, текст в VisualBrush, DrawingBrush, BitmapCacheBrush и везде, где представление промежуточной прорисовки будет предыдущим результатом в черно-белом тексте.
Текстовый стек
Новый стек для прорисовки текста
WPF стек для прорисовки текста был полностью заменен, изменение, которое приводит к существенным усовершенствованиям в чёткости прорисовки текста, способности к изменению настроек и поддержки международных языков. Данный новый текстовый стек поддерживает оптимизированный символьный слой, чтобы показывать текст с сопоставимой резкостью текста в Win32/GDI:
Так же новый стек поддерживает явно выбираемые режимы прорисовки текста: aliased, grayscale, ClearType.
Новый текстовый стек позволяет оптимизировать текстовую привязку для анимации и статики. Вдобавок, новый текстовый стек поддерживает шрифты с встроенными картами изображений, что позволяет многим восточно-азиатским шрифтам прорисовываться с чёткостью, к которой привыкли пользователи Win32.
BindableRun
С выпуском WPF, Run.Text был простым CLR-свойством. Это значит, что Run.Text испытывает недостаток во всех преимуществах системы зависимостей свойств в WPF, самое значительное из которых — привязка. В WPF 4 мы конвертировали Run.Text в зависимое свойство, позволяющее разработчикам впервые использовать, привязанный к данным, Run. Больше информации об этом тут.
Собственные словари
WPF включает в себя проверку орфографии, которая до 4-ой версии использовала словари предоставляемые ОС. Это было большой проблемой для приложений, которые используют специфическую терминологию, данные приложения надоедали постоянными уведомлениями о неправильном написании. WPF 4 представляет API, которое позволяет приложениям добавлять слова в словари, используемые WPF для проверки орфографии. Более подробно об этом тут.
Кисть выделения и каретки
В порыве разрешить разработчикам настраивать богатый вид WPF приложений, теперь вы можете изменить кисть для выделения текста и каретки через два простых свойства — SelectionBrush и CaretBrush:
Windows 7
- Мультитач события Manipulation, Inertia (Pan, Zoom, Rotate) над UIElement
- Простые мультитач события (Up, Move, Down) над UIElement, UIElement3D и ContentElement
- Захват нескольких элементов управления
- Поддержка мультитач в ScrollViewer
- Расширяемость сенсорных устройств
- Совместимость с Surface SDK в будущем
Интеграция c Windows 7 интерфейсом
WPF 4 предоставляет новый и ключевой функционал в Windows 7 для WPF разработчиков. Новая панель задач захламлена и может передавать больше информации. Aero-пиктограммы поддерживают пользовательские команды. Jump List обеспечиваетт доступ к контекстуальному запуску задач и файлов для приложения.
- Задачи
- Элементы
- Список недавно открытых и часто используемых элементов
- Собственные категории
- Индикатор прогресса
- Иконки наложения
- Кнопки с миниатюрами с поддержкой команд
- Текст описания для миниатюр в менеджере окон
Иконка наложения (Icon Overlays)
Иконка наложения позволяет приложению выводить определённые уведомления и состояние пользователю через собственную кнопку в панели задач, отображая небольшое наложение, которое появляется в нижнем правом углу кнопки.
Индикатор прогресса
Кнопка в панели задача может быть использована для отображения простой информации о прогрессе, избавляю пользователя в нужде открывать окно для просмотра состояния. Индикатор прогресса может быть использован для отслеживания процесса копирования файлов, загрузки, инсталляции, записи данных на диск или другой операции, которая занимает определенный отрезок времени.
Панели миниатюр (Thumbnail Toolbars)
Панели миниатюр предоставляют доступ к ключевым команд для приложения без надобности пользователю активировать или разворачивать окно приложения. Данный функционал позволяет разработчикам приложений встраивать элементы управления приложением непосредственно в миниатюру предпросмотра окна. Приложение может включать, отключать или скрывать кнопки с панели миниатюры в зависимости от текущего состояния.
Основы WPF
Новый движок XAML/BAML парсера
В WPF 4 был заменена реализация XamlReader.Load(), BAML-загрузка, функциональность Control & DataTemplate новым движком построенным на основе нового System.Xaml.dll. Как часть стараний, мы исправили много ошибок и добавили много новых функциональных улучшений. Пользователи XamlReader.Load() могут воспользоваться несколькими новыми особенностями языка в XAML2009, такие как поддержка генерик-типов. MarkupExtensions и TypeConverters могут уже сейчас получать доступ к многим сервисам через создания объектного графа, позволяя выполнять больше сценариев, как доступ к Root-объекту. Будет еще проще создать инструменты для анализа и манипулирования XAML с новыми низкоуровневыми API, предоставляемые в System.Xaml.dll.
Поддержка привязки данных для DLR
Данная функциональность расширяет движок привязки данных в WPF для указания существующим свойствам и индексаторам синтаксис обращения к привязанным данным, для поддержки доступа к динамическим членам предлагаемого IDynamicMetaObjectProvider.
Visual State Manager (VSM)
Другая новая функциональность поддерживает WPF-Silverlight континуум в VisualStateManager, который представляет новый простой способ применять визуальные состояния элементов управления. Механизм позволяет настроить вид и поведение элемента управления, предоставляя средство указания управляющей логики к его соответствующему началу и концу визуальных состояний.
VSM является очень гибким в генерировании анимации перехода в соответствующие состояния, следовательно автор элемента управления тратит меньше времени на написание кода и больше времени на его вид. Это означает, что VSM может дать автору элемента управления возможность легко изменять поведение и вид элементов управления, а также изменять визуальный ответ элемента управления на пользовательское действие. Все это полностью поддерживается в Expression Blend.
HTML-XBAP Script Interop
WPF 4 обеспечивает средства для прямого общения между XBAP и скриптами в размещенной HTML странице (где XBAP загружен в HTML фрейм или элемент IFRAME). XBAP может получить глубокий доступ в HTML DOM, включая ActiveX элементы управления, встроенные в содержащей HTML странице, а также обрабатывать события DOM.
WPF открывает главный объект скрипта в размещаемом фрейме. Это динамический объект, который представляет объект окна фрейма, а также любые функции или глобальные переменные в скрипте на HTML странице. Из него, приложение может вызывать функции скрипта напрямую или обращаться к HTML DOM. Данная функциональность доступна в partial-trust XBAP и во всех поддерживаемых версиях Internet Explorer и Firefox.
Виртуализация UIAutomation
WPF представил виртуализированне элементы управления в предыдущих версиях. Тем не менее, не было стандартизированного способа для клиента автоматизации взаимодействия с виртуализированным элементом управления. В WPF 4 было добавлено два новых шаблона для элементов управления — ItemsContainerPattern и VirtualizedItemPattern, для поддержки доступа и взаимодействия с виртуализированными элементами. ItemsContainerPattern используется для получения доступа к виртуализированным элементам управления и для поиска виртуализированного элемента, а VirtualizedItemPattern для реализации виртуализированных элементов.
Шаблон SynchronizedInput
Это еще один UIA шаблон проектирования элемента управления, добавленные в WPF 4. Данный шаблон используется клиентами автоматизации, чтобы отслеживать направление заданных событий ввода в корректный элемент WPF фреймворком. Данный шаблон имеет три события автоматизации: InputReachedTargetEvent, InputReachedOtherElementEvent и InputDiscardedEvent, чтобы сообщать, обработан ли ввод.
Развертывание
Вы можете просматривать и изменять версию фреймворка, на которую ориентируетесь разработке, открыв свойства проекта, а далее выбрав закладку «Application». Далее выбрать в выпадающем списке “Target framework” полную версию или Client Profile. В «Publish» свойствах проекта вы также можете выбрать необходимую версию для ClickOnce развертывания. В Beta2, VS2010 автоматически выбирает правильный профиль, в зависимости от вашей первичной направленности проекта:
Тоже самое диалоговое окно вы увидите при создании “Setup and Deployment” проекта (“Add New Project”/“Other Project Types”). NET4 Client Profile выделен в списке по умолчанию.
Full trust развертывание XBAP приложений
Начиная с WPF 4, запрос на поднятие привилегий ClickOnce также включен для XAML Browser Applications (XBAPs) для интранет и доверительных зон, делая резвертывание еще проще для full-trust XBAP приложений. Для тех приложений, которые требуют повышенных прав безопасности, чем у минимальных прав доступа кода (CAS), пользователь должен выбрать «Запуск» при запросе поднятия привилегий ClickOnce, для запуска XBAP с требуемыми правами.
Windows API и Windows Runtime
Прежде чем начать разбираться с UI-фреймворками стоит сначала опуститься на уровень ниже, впрочем, без особых подробностей. В современной винде 2 основных API для работы приложений. Windows API (обычно сокращается до Win32) и Windows Runtime (WinRT). При разработке первый был ориентирован на язык С, и активно развивался вплоть до выхода Windows 8. Я не имею в виду, что этот API объявлен устаревшим, но все новые функции системы уже разрабатывются для WinRT. Хотя некоторые так же бекпортируются и в Win32. Приложения, которые работают через Win32 и используют его модель приложений и сервисов Microsoft называет классическими.
WinRT - вещь немного более сложная. Это даже не API, а способ взаимодействия с ним. Из вики:
Помимо объектно-ориентированности, новый API имеет версионирование, больший контроль доступа к вызовам. Некоторые системные вызовы могут делать только приложения определённых разработчиков, некоторые доступны по специальному ключу. Некоторые сокрыты весьма условно: если приложение попало на комп, оно может ими пользоваться. Но вот в Microsoft Store могут и не пустить.
WPF, UWP, WinUI, MAUI, Windows App SDK
Человека далёкого от клиентской разработки на Windows все эти термины определённо путают. И даже среди MS-сообщества регулярно возникают споры жив UWP или мёртв. Причем главный вопрос в этом споре - а что же такое UWP?
Вот уже года 3 Microsoft проводит "рефакторинг" в своём "королевстве". Несколько устав видеть одни и те же споры в твиттере, и оставлять одни и те же комментарии на хабре, я решил расписать как же многочисленные UI-фреймворки MS соотносятся между собой. Кто из них больше мёртв. Возможно, кому-то это поможет в выборе технологии для будущего проекта.
Подытожим
UWP — название подмножества API Windows, но часто используется как сокращение для изолированных приложений, работающих на этом API.
WinUI — современный графический фреймворк для Windows
Windows App SDK — в перспективе, единый набор SDK для любых приложений на Windows, вне зависимости от языка, и с возможностью переключения между различными жизненными циклами приложений
UI-фреймворки
Наконец можно поговорить про UI-фреймворки. С Windows Forms и WPF многие знакомы. UI, работающий поверх Win32 API. Отличаются способом верстки UI (дизайнер или XAML) и способом отрисовки (GDI или DirectX). С появлением WinRT, эти фреймворки особо не развиваются, но из-за огромного количества легаси приложений, Microsoft вынуждена поддерживать их. Например, в последних выпусках десятки значительно улучшена поддержка HDPI для WinForms.
WinUI
WinUI достоин отдельного упоминания, так как он един в двух лицах.
WinUI 2.x — UI-библиотека для UWP-приложений, содержащая в себе новые, в том числе экспериментальные, контролы. А также, обеспечивающая совместимость со старыми версиями Windows 10 (аналог AndroidX)
WinUI 3.x — часть Windows App SDK. Фактически это и есть UI-фреймворк для UWP, только оторванный от жизненного цикла UWP-приложений.
Обе версии сейчас развиваются параллельно.
Что такое WPF?
В Windows с версии 3.11 присутствовал компонент вывода на экран GDI, позже его обновили, в Windows XP, если не ошибаюсь, уже используется GDI+.
Проблем от использования GDI+ в приложениях было и будет много, наряду с GDI была подсистема вывода 3D – DirectX, существовавшая с Windows 95. У нее были другие проблемы, но главной проблемы – сильной загрузки процессора для перерисовки моделей у нее не было.
Видимо решение у Microsoft зрело давно, раз они интегрировали WPF в Vista и Server 2008, которое, как мне кажется, и дало больший толчок для его использования, нежели всяческие семинары и статьи. Это, кстати дает дополнительный плюс, ведь упрощается модель редистрибуция приложений использующих 3 и 3.5 фреймворки.
Собственно, как я думаю, Вы уже догадались, WPF использует DirectX для вывода приложений на экран пользователя. Но тут и первые грабли, т.к. отображение форм у пользователей будет местами разниться, ведь мы, же не сговорились и не скупили продукцию 3D middle и high видеокарт.
В WPF, на данный момент существуют 3 уровня, для определения как будет «рендерится» формочка и остальные примитивы на экране.
a) Уровень 0: Нет hardware acceleration (внутреннего ускорения). Примерно DirectX 7.0
b) Уровень 1: Частичная hardware acceleration. Примерно DirectX 8.
c) Уровень 2: Все фичи задействованы. Примерно DirectX 9 и выше.
Как узнать какой у вас уровень или у пользователя?
Int renderingTier = (RenderCapability.Tier >> 16);
if (renderingTier == 0)
// 0 уровень
>
Однако разработчики не ограничились тем, что использовали другой уровень презентационной модели, а сделали еще много вещей:
a) Новая описательная модель формы и интерфейса в принципе — XAML
b) Новая модель Компоновки: имеется ввиду не компоновщик на уровне компилятора,
а новая модель включения одного в другое. Пример (в textbox вставить checkbox).
c) Новые сопутствующие контролы и методы для печати и медиа.
d) Новая модель привязки данных.
e) Новые возможности в формах.
f) Многое другое, что я еще не узнал.
g) Возможность почти безболезненно перенести проект в Web
(О XBAP Rich Web Application я расскажу, через пару статей).
h) Анимация.
Да называть все везде формами, наверное, неверно, ведь модель состоит из окон и страниц, страницы можно соответственно подгружать, что в веб-версии, что в обычной, через компонент Frame или через Canvas, например, в WPF/E (SilverLight).
Пример подгрузки страницы: Frame.Source = new Uri ("Page1.xaml", UriKind.Relative);
В следующей статье я рассмотрю XAML. Вкратце пока скажу, что XAML
(eXtensible Application Markup Language) – это специальный описательный язык для
документов, окон и страниц, чем то, напоминает этакую помесь XML и HTML.
Ну и простой пример окна (только XAML):
Кстати, советую для тестирования разметки и небольших кусочков использовать не Visual Studio, а XamlPadX или XamlHack, или XamlPad.
В заключение, хотелось бы порекомендовать книги по WPF:
Написано очень добротно, неточностей перевода мало, рассказано почти обо всем, минус – то, что маленький тираж, и когда она только появилась, пришлось побегать и месяца полтора ждать.
«В целом книга написана очень хорошо, но, похоже, все-таки, местами слишком все подробно расписано и присутствуют неточности перевода» – это со слов человека (который упоминался в повествовании ранее), который ее читал.
Вот немного блогов, посвящённых WPF:
Английские книги
Дополнительные программы, для работы с WPF
(Спасибо хаброюзеру Vladek за помощь в дополнении поста и хаброюзеру XaocCPS за его рецензирование)
Буду рад, если Вы дополните этот список, особенно книгами на английском,
т.к я пока еще их не изучал, но видел, либо сделаете уточнения к статье. Спасибо!
Читайте также: