Windows presentation foundation что это такое
There are two implementations of WPF:
.NET version (this guide):
.NET Framework 4 version:
This overview is intended for newcomers and covers the key capabilities and concepts of WPF. To learn how to create a WPF app, see Tutorial: Create a new WPF app.
Program with WPF
WPF includes more programming constructs that enhance properties and events: dependency properties and routed events.
Markup and code-behind
WPF lets you develop an application using both markup and code-behind, an experience with which ASP.NET developers should be familiar. You generally use XAML markup to implement the appearance of an application while using managed programming languages (code-behind) to implement its behavior. This separation of appearance and behavior has the following benefits:
Development and maintenance costs are reduced because appearance-specific markup isn’t tightly coupled with behavior-specific code.
Development is more efficient because designers can implement an application’s appearance simultaneously with developers who are implementing the application’s behavior.
Globalization and localization for WPF applications is simplified.
Markup
XAML is an XML-based markup language that implements an application’s appearance declaratively. You typically use it to define windows, dialog boxes, pages, and user controls, and to fill them with controls, shapes, and graphics.
The following example uses XAML to implement the appearance of a window that contains a single button:
Specifically, this XAML defines a window and a button by using the Window and Button elements. Each element is configured with attributes, such as the Window element’s Title attribute to specify the window’s title-bar text. At run time, WPF converts the elements and attributes that are defined in markup to instances of WPF classes. For example, the Window element is converted to an instance of the Window class whose Title property is the value of the Title attribute.
The following figure shows the user interface (UI) that is defined by the XAML in the previous example:
Since XAML is XML-based, the UI that you compose with it’s assembled in a hierarchy of nested elements that is known as an element tree. The element tree provides a logical and intuitive way to create and manage UIs.
Code-behind
The main behavior of an application is to implement the functionality that responds to user interactions. For example clicking a menu or button, and calling business logic and data access logic in response. In WPF, this behavior is implemented in code that is associated with markup. This type of code is known as code-behind. The following example shows the updated markup from the previous example and the code-behind:
The updated markup defines the xmlns:x namespace and maps it to the schema that adds support for the code-behind types. The x:Class attribute is used to associate a code-behind class to this specific XAML markup. Considering this attribute is declared on the element, the code-behind class must inherit from the Window class.
InitializeComponent is called from the code-behind class’s constructor to merge the UI that is defined in markup with the code-behind class. ( InitializeComponent is generated for you when your application is built, which is why you don’t need to implement it manually.) The combination of x:Class and InitializeComponent ensure that your implementation is correctly initialized whenever it’s created.
Notice that in the markup the element defined a value of button_click for the Click attribute. With the markup and code-behind initialized and working together, the Click event for the button is automatically mapped to the button_click method. When the button is clicked, the event handler is invoked and a message box is displayed by calling the System.Windows.MessageBox.Show method.
The following figure shows the result when the button is clicked:
Input and commands
Controls most often detect and respond to user input. The WPF input system uses both direct and routed events to support text input, focus management, and mouse positioning.
Applications often have complex input requirements. WPF provides a command system that separates user-input actions from the code that responds to those actions. The command system allows for multiple sources to invoke the same command logic. For example, take the common editing operations used by different applications: Copy, Cut, and Paste. These operations can be invoked by using different user actions if they’re implemented by using commands.
Controls
The user experiences that are delivered by the application model are constructed controls. In WPF, control is an umbrella term that applies to a category of WPF classes that have the following characteristics:
For more information, see Controls.
WPF controls by function
The built-in WPF controls are listed here:
Buttons: Button and RepeatButton.
Data Display: DataGrid, ListView, and TreeView.
Date Display and Selection: Calendar and DatePicker.
Digital Ink: InkCanvas and InkPresenter.
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, что дает возможность создавать неотразимые эффекты на поддерживаемом оборудовании.
WPF 4 переняла свойство UseLayoutRounding, представленное в Silverlight 2. Движок макета зачастую рассчитывает подпиксельные координаты расположения. Это приводит к артефактам при прорисовке, когда элемент расположен на стыке подпиксельных границ и сглажен над несколькими физическими пикселями.
UseLayoutRounding заставит движок макета располагать элементы по всем границам пикселя, следовательно, убирая большинство артефактов прорисовки, вызванной данной проблемой, что позволяет создавать чистый и чёткий UI по умолчанию.
Функции для облегчения анимации
Дискретная, линейная и сплайновая анимация уже поддерживается предыдущими версиями WPF. WPF 4 представляет новый концепт «Easing Functions», которые позволяют разработчикам создавать различную анимацию. Например, пружинистые движения или добавить упреждение в анимацию. Функции упрощения (Easing Functions) определяют способ анимации от начала и до конца. Встроенные функции упрощения предоставляют спектр режимов в анимации: круговой, экспоненциальной, эластичной и пружинистой. Функции упрощения спроектированы легко расширяемыми, позволяя разработчикам создавать собственные. Благодаря данному нововведения, дизайнеры могут без усилий создавать плавную и органичную анимацию.
Новое добавленное свойство CleartypeHint позволяет разработчикам приложений включить высококачественную прорисовку Cleartype текста, когда во многих ситуациях он был заранее отключен. Такие ситуации включают в себя текст в наслоившихся окнах, текст в VisualBrush, DrawingBrush, BitmapCacheBrush и везде, где представление промежуточной прорисовки будет предыдущим результатом в черно-белом тексте.
Текстовый стек
Новый стек для прорисовки текста
WPF стек для прорисовки текста был полностью заменен, изменение, которое приводит к существенным усовершенствованиям в чёткости прорисовки текста, способности к изменению настроек и поддержки международных языков. Данный новый текстовый стек поддерживает оптимизированный символьный слой, чтобы показывать текст с сопоставимой резкостью текста в Win32/GDI:
Так же новый стек поддерживает явно выбираемые режимы прорисовки текста: aliased, grayscale, ClearType.
Новый текстовый стек позволяет оптимизировать текстовую привязку для анимации и статики. Вдобавок, новый текстовый стек поддерживает шрифты с встроенными картами изображений, что позволяет многим восточно-азиатским шрифтам прорисовываться с чёткостью, к которой привыкли пользователи Win32.
С выпуском WPF, Run.Text был простым CLR-свойством. Это значит, что Run.Text испытывает недостаток во всех преимуществах системы зависимостей свойств в WPF, самое значительное из которых — привязка. В WPF 4 мы конвертировали Run.Text в зависимое свойство, позволяющее разработчикам впервые использовать, привязанный к данным, Run. Больше информации об этом тут.
WPF включает в себя проверку орфографии, которая до 4-ой версии использовала словари предоставляемые ОС. Это было большой проблемой для приложений, которые используют специфическую терминологию, данные приложения надоедали постоянными уведомлениями о неправильном написании. WPF 4 представляет API, которое позволяет приложениям добавлять слова в словари, используемые WPF для проверки орфографии. Более подробно об этом тут.
Кисть выделения и каретки
В порыве разрешить разработчикам настраивать богатый вид WPF приложений, теперь вы можете изменить кисть для выделения текста и каретки через два простых свойства — SelectionBrush и CaretBrush:
Windows 7
Интеграция 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.
WPF представил виртуализированне элементы управления в предыдущих версиях. Тем не менее, не было стандартизированного способа для клиента автоматизации взаимодействия с виртуализированным элементом управления. В WPF 4 было добавлено два новых шаблона для элементов управления — ItemsContainerPattern и VirtualizedItemPattern, для поддержки доступа и взаимодействия с виртуализированными элементами. ItemsContainerPattern используется для получения доступа к виртуализированным элементам управления и для поиска виртуализированного элемента, а VirtualizedItemPattern для реализации виртуализированных элементов.
Это еще один UIA шаблон проектирования элемента управления, добавленные в WPF 4. Данный шаблон используется клиентами автоматизации, чтобы отслеживать направление заданных событий ввода в корректный элемент WPF фреймворком. Данный шаблон имеет три события автоматизации: InputReachedTargetEvent, InputReachedOtherElementEvent и InputDiscardedEvent, чтобы сообщать, обработан ли ввод.
Развертывание
.NET Framework 4 Client Profile
Вы можете просматривать и изменять версию фреймворка, на которую ориентируетесь разработке, открыв свойства проекта, а далее выбрав закладку «Application». Далее выбрать в выпадающем списке “Target framework” полную версию или Client Profile. В «Publish» свойствах проекта вы также можете выбрать необходимую версию для ClickOnce развертывания. В Beta2, VS2010 автоматически выбирает правильный профиль, в зависимости от вашей первичной направленности проекта:
Тоже самое диалоговое окно вы увидите при создании “Setup and Deployment” проекта (“Add New Project”/“Other Project Types”). NET4 Client Profile выделен в списке по умолчанию.
Если вы установили полную версию фреймворка, вы можете переключится на Client Profile, удалив «Extended»
Full trust развертывание XBAP приложений
Начиная с WPF 4, запрос на поднятие привилегий ClickOnce также включен для XAML Browser Applications (XBAPs) для интранет и доверительных зон, делая резвертывание еще проще для full-trust XBAP приложений. Для тех приложений, которые требуют повышенных прав безопасности, чем у минимальных прав доступа кода (CAS), пользователь должен выбрать «Запуск» при запросе поднятия привилегий ClickOnce, для запуска XBAP с требуемыми правами.
WPF Series: Intro aka Введение
Года 3 назад, обсуждая Windows Forms с другом, я жаловался на то что неудобно использовать Windows Forms для вывода видео и музыки, а друг о том, что ему неудобно создавать свои контролы, а также формировать тулбары.
Жизнь научила меня изучать теперь сначала рынок, ведь даже самое красивое и правильное приложение может быть не оценено, если пользователю нужно совершать телодвижения, которые могут вызвать у него от сведения руки от нажатий кучи ненужных кнопок в диалогах программ до того, что ему нужно потратить дополнительный пенни для запуска вашей программы.
Год назад я много слышал о различных технологиях, появившихся в Net Framework 3.0. Я уже начал писать ранее на C#/VB.Net в контексте ASP.Net и почитав отзывы наиболее рьяных архитекторов, решил подождать.
Спустя полгода, а точнее прошлой весной, я слушал великолепные отзывы о технологии WPF от своего товарища, у него была одна проблема: 80% возможностей он так и не смог раскрыть, т.к. нормальная книга появилась летом (из тех, где подробно и довольно в доступной форме рассказывается о технологии), а до этого можно было почерпнуть информацию только из блогов, в коих, зачастую, многое упускалось из вида…
Наслушавшись его, и умудрившись опыта, я сначала начал читать книгу, которая обновилась к этому времени, вместе с фреймворком до версии 3.5. Многое ускользало и пока продолжает ускользать от моего понимания, но теперь есть куда копать: западные блоггеры-программисты, раскусив плод WPF, застрочили как из пулемета, да и наши начинают догонять.
Что такое 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 за его рецензирование)
Буду рад, если Вы дополните этот список, особенно книгами на английском,
т.к я пока еще их не изучал, но видел, либо сделаете уточнения к статье. Спасибо!
Существует две реализации WPF:
Версия .NET (это руководство).
Этот обзор предназначен для новичков: в нем рассматриваются ключевые возможности и понятия WPF. Сведения о создании приложения WPF см. в разделе Учебник: создание нового приложения WPF.
Программирование с помощью WPF
WPF включает в себя дополнительные конструкции программирования, которые расширяют возможности свойств и событий: свойства зависимостей и перенаправленные события.
Разметка и код программной части
WPF позволяет разрабатывать приложения, используя как разметку, так и код программной части, что привычно для разработчиков на ASP.NET. Разметка XAML обычно используется для определения внешнего вида приложения, а управляемые языки программирования (код программной части) — для реализации его поведения. Такое разделение внешнего вида и поведения имеет ряд преимуществ.
Затраты на разработку и обслуживание снижаются, так как разметка, определяющая внешний вид, не связана тесно с кодом, обуславливающим поведение.
Повышается эффективность разработки, так как дизайнеры, занимающиеся внешним видом приложения, могут работать параллельно с разработчиками, реализующими поведение приложения.
разметку
XAML — это язык разметки на основе XML, который служит для определения внешнего вида приложения в декларативной форме. Обычно он используется для определения окон, страниц и пользовательских элементов управления, а также их заполнения элементами управления, фигурами и графическими элементами.
В приведенном ниже примере XAML используется для определения внешнего вида окна, содержащего одну кнопку.
На рисунке ниже показан пользовательский интерфейс, который определяется кодом XAML из предыдущего примера.
Так как язык XAML основан на XML, создаваемый с его помощью пользовательский интерфейс образует иерархию вложенных элементов, известную как дерево элементов. Дерево элементов обеспечивает логичный и интуитивно понятный способ создания пользовательских интерфейсов и управления ими.
Файл с кодом программной части
Основное поведение приложения состоит в реализации функции, реагирующей на взаимодействие с пользователем. Например, нажатие меню или кнопки и вызов бизнес-логики и логики доступа к данным в ответ. В WPF такое поведение реализуется в коде, связанном с разметкой. Этот код называется кодом программной части. В приведенном ниже примере показана обновленная разметка из предыдущего примера и код программной части.
Метод InitializeComponent вызывается из конструктора класса кода программной части для слияния пользовательского интерфейса, определенного в разметке, с классом кода программной части. ( InitializeComponent создается при построении приложения, поэтому реализовывать его вручную не нужно.) Сочетание x:Class и InitializeComponent гарантирует правильную инициализацию реализации при создании.
На рисунке ниже показан результат нажатия на кнопку.
Ввод данных и команды
Элементы управления чаще всего используются для определения ввода данных пользователем и реагирования на него. Система ввода WPF использует как прямые, так и перенаправленные события для поддержки ввода текста, управления фокусом и определения положения указателя мыши.
Приложения часто предъявляют сложные требования к вводу. WPF предоставляет систему команд, которая отделяет действия по вводу данных пользователем от кода, реагирующего на эти действия. Система команд позволяет нескольким источникам вызывать одну и ту же логику команд. Например, рассмотрим распространенные операции редактирования, используемые различными приложениями: Копировать, Вырезать и Вставить. Эти операции можно вызывать путем выполнения различных действий пользователя, если они реализованы с помощью команд.
Элементы управления
Возможности взаимодействия с пользователем, обеспечиваемые моделью приложения, реализуются с помощью сконструированных элементов управления. В WPF элемент управления — это собирательный термин, который применяется к категории классов WPF, имеющей следующие характеристики:
Более подробную информацию см. в разделе Элементы управления.
Функциональная классификация элементов управления WPF
Ниже перечислены встроенные элементы управления WPF.
Вывод и выбор дат: Calendar и DatePicker.
- Что понимается под суверенитетом и легитимностью государства
- Trade in samsung что это