WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 |

Курс "Обзор перспективных технологий Microsoft.NET"

Лекция 3. Windows Presentation Foundation

Создание UI

Человечество проделало огромный путь в технологиях создания пользовательского интерфейса. Когдато, на заре компьютерной эры, единственный интерфейс пользователя составляла колода перфокарт, которые программист загружал в компьютер, и бумажная лента, которую компьютер ему выдавал (см., например, http://nrd.pnpi.spb.ru/UseSoft/Journals/Soft&Script/Soft&Script26/compriceperfocard.html). Первым революционным шагом стало появление консоли, что автоматически (хотя и далеко не сразу) привело к смене парадигмы общения компьютера и пользователя с пакетной обработки к интерактивной. Довольно долго консоли были текстовыми, и пользовательский интерфейс, в основном, сводился к вопросам и ответам. Однако и в консоли со временем появились довольно богатые интерфейсы, использовавшие возможности псевдографики. Вместе с ними появились и первые развитые технологии для создания интерфейсов, например, можно вспомнить известную оболочку Turbo Vision. Надо сказать, задолго до появления Turbo Vision уже были и графические интерфейсы (Mac) со своим инструментарием. Turbo Vision же был первой из подобных технологий, с которой ознакомился автор, если не считать собственноручно написанную систему построения меню и menubars. J

В то же время становится популярной Windows, что в очередной раз меняет подходы к созданию интерфейсов. Windows предложила набор стандартных элементов управления (или, порусски, «контролов»), а также API для работы с ними. Это позволило приложениям выглядеть одинаково с системными, не говоря уже о существенном облегчении в программировании UI, т.к. большую часть труда взяла на себя система. Поначалу набор контролов был недостаточен, а API вызывало много нареканий, но с развитием Windows положение вещей улучшалось. Кроме того, появилось много альтернатив (дада, по определению альтернатива только одна, но что поделать, если так принято говорить) низкоуровневому API Windows. В частности, можно упомянуть «родные» Microsoft’овские технологии MFC и ATL, которые были интегрированы со средством разработки Microsoft – Visual Studio. С помощью этих технологий можно разрабатывать интерфейсы в объектоориентированном стиле, кроме того, в них реализован шаблон («паттерн») modelviewcontroller, позволяющий разделить представление и данные. Стоит упомянуть и другие технологии, такие как кроссплатформенная Qt и, конечно же, Java c ее AWT и Swing.

Параллельно с появлением и развитием технологий, подобных MFC, появились и стали развиваться технологии для работы с продвинутой графикой. Так, в 1995м году в одноименной системе Windows 95 появилась технология DirectX, облегчающая работу по созданию игр и мультимедиаприложений. За 3 года до Microsoft’овского DirectX появилась технология OpenGL компании Silicon Graphics. Точнее сказать, это стандарт, выработанный несколькими компаниями (и, в частности, Microsoft), выросший из разработки Silicon Graphics. В отличие от проприетарного DirectX, OpenGL является кроссплатформенным и стандартным. Нас же интересует то, что развитие графических технологий с этого времени шло параллельно с развитием технологий создания «обычного» UI.

Наконец, надо упомянуть и третью ветвь развития UI, появившуюся примерно в то же время – UI сначала вебстраниц, потом и вебприложений. Поначалу это был чистый HTML, потом как грибы после дождя стали появляться многочисленные технологии вроде Javaапплетов, flashприложений и т.п.

Наконец, с выходом Microsoft.NET появились технологии Windows Forms и ASP.NET.

Что происходит сейчас? На данный момент Microsoft предлагает следующие решения в этих направлениях:

Windows Forms для создания пользовательского интерфейса для настольных (desktop) приложений DirectX и OpenGL для мира графики Web Forms (из ASP.NET) для создания пользовательского интерфейса вебприложений Visual Studio 2005 позиционируется как IDE для разработки настольных (desktop) и вебприложений.

Предпосылки появления WPF Итак, с точки зрения UI у нас существует три разных типа приложений, каждый из которых имеет свой набор технологий для реализации. И одной из предпосылок создания WPF является идея интеграции подобных технологий в одной. Идея интеграции всего со всем вообще является доминирующей последние годы.



Кроме того, текущей графической платформе Windows уже 20 лет. Это прекрасно, но, учитывая ошеломительное развитие аппаратных графических средств (видеокарт и разнообразных графических ускорителей), потенциально мы могли бы использовать всю их мощь не только в приложениях типа игр, но и в обычных приложениях. Мешает нам только то, что с помощью привычных технологий типа MFC или Windows Forms крайне трудно сделать изощренный интерфейс, а тратить время на создание оного с помощью DirectX или OpenGL представляется малоосмысленным. Таким образом, одной из целей создания WPF было предоставить преимущества современных аппаратных графических средств более широкой аудитории разработчиков.

Наконец, еще одной предпосылкой появления WPF стала неудовлетворенность текущей схемой общения дизайнера и разработчика при создании UI. Это мы обсудим чуть позже.

Windows Presentation Foundation – три в одном Технология Windows Presentation Foundation (WPF), ранее носившая кодовое название Avalon, является одной из частей нового API будущих версий Windows. Это API носит название.NET Framework 3.0 (бывший WinFX).

WPF – новая графическая подсистема, основанная на управляемом коде. WPF является надстройкой над DirectX, что дает приложениям, написанным с её помощью, богатые возможности по отрисовке. Эта технология объединяет в себе три мира, перечисленные ранее, – UI для настольных и вебприложений, и UI для игр и мультимедиаприложений. WPF содержит в себе множество элементов управления, поддержку видео, анимации, трехмерных изображений и т.п.

Надо отметить, что WPF – это не только диалоги, картинки и видео. Кроме прочего, WPF включает в себя также синтез и распознавание речи. Более полный список того, что поддерживается WPF:

2D 3D Работа с текстами и шрифтами Работа с изображениями Эффекты Аудио Видео Анимация и работа с временными интервалами Составные части WPF WPF состоит из двух частей:

Движка WPF Framework (API) Движок WPF, как уже упоминалось, построен поверх DirectX, что позволяет использовать всю мощь современного «железа». Так, например, когда WPF определяет наличие видеокарты, поддерживающей аппаратное ускорение, он автоматически использует эти возможности карты. Вообще, т.к. использование WPF требует серьезной аппаратной поддержки, программа сертификации на готовность к Windows Vista требует от компьютера наличия графического процессора, поддерживающего Dx9. Впрочем, это весьма логично – перекладывать графические вычисления с главного процессора на графический, освобождая таким образом ресурсы для основных задач.

Рендеринг в WPF – векторный, это дает возможность использовать преимущества мониторов с высоким разрешением, без каких либо дополнительных усилий программиста или пользователя. UI больше не зависит от конкретных разрешений, введено понятие «виртуального пикселя».

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

Стандартных форм (такие как кнопки и элементы ввода) Документов Изображений и видео Графических примитивов 3D Различных контейнеров и панелей для размещения контролов и т.д. Естественно, у программистов есть возможность создавать собственные контролы, базируясь на существующих, так же как и создавать их с нуля.

Схема WPF Framework Не станет сюрпризом то, что API WPF – это managed фреймворк, т.е. он предоставляет программный доступ к своим возможностям через управляемый (managed) код Microsoft.NET.

Декларативное программирование UI и XAML Одной из идей WPF является то, что программирование UI хочется сделать как можно более декларативным. В самом деле, почему размеры и расположение элементов управления, реакцию на всякие события и т.п. надо реализовывать в коде, если эта информация известна заранее? Эти соображения привели разработчиков WPF к идее использовать XML для описания пользовательского интерфейса. Стандарт называется XAML (eXtensible Application Markup Language), и файл на нем выглядит примерно так:





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

Идея использовать XML для описания UI не нова. Достаточно популярен язык разметки XUL (XML User Interface Language). XUL является частью среды разработки кроссплатформенных интерфейсов, известной как XPFE. Это полнофункциональный язык разметки, на объекты приложений, такие как окна, метки и кнопки. Подробнее ознакомиться с ним можно на http://www.xulplanet.com/.

C помощью XAML описывается, прежде всего, пользовательский интерфейс. Логика приложения попрежнему управляется процедурным кодом (С#, VB и т.д.).

XAML может использоваться как для браузербазированных приложений, так и для локальных настольных приложений. Немаловажной деталью является легкость XAML для локализации UI. Если раньше (т.е. сейчас J) для этих целей использовали специальные механизмы вроде таблицы строк, загрузки строк из iniфайлов, ресурсные dll или же специальных утилит «вытаскивания» строк, то с появлением XAML, хранящего все строчки UI в текстовом виде, локализация значительно упрощается.

Наконец, формат XAML, основанный на XML, очень легко генерировать программно, что открывает более широкие возможности для третьесторонних разработчиков, реализующих различные инструменты работы с UI, по сравнению с текущей ситуацией, когда приходится генерировать UI в закрытых проприетарных форматах (например, на кафедре системного программирования матмеха СПбГУ разработаны программные средства «Абитуриент» и «Студент», в которых реализована генерация форм на Visual Basic, для чего программистам пришлось немного поразбираться в его недокументированном формате).

Основы модели UI и XAML Интерфейс пользователя WPFприложения задается XAML. C XAML может быть связан скомпилированный codebehind код (что может вызвать легкое ощущение дежавю у знакомых с моделью ASP.NET). Например, если страница вашего приложения описывается файлом preved.xaml, то codebehind, как правило, будет храниться в preved.xaml.cs. Codebehind может содержать реакцию на различные события, генерируемые пользовательским интерфейсом (такие как нажатие клавиши мыши или «наезд» указателя мыши на элемент управления). Одной из светлых целей такого разделения является написание одного кода для всех типов приложений (то есть, ваш код можно было бы скомпилировать и как настольное приложение, и как приложение, просматриваемое с помощью браузера, и как smart clientприложение).

Т.к. XAML – это «нормальный» XML, то он подчиняется всем правилам wellformed XML, в частности, содержит ровно одну корневую вершину и является деревом. На вершине иерархии находится один из контейнерных объектов. Внутри этих объектов располагаются знакомые нам элементы управления и другие контейнеры.

Набор элементов управления, без сюрпризов, очень похож на «старый добрый» набор контролов Win32. Это кнопки, меню, текст, картинки и т.п. Но на самом деле каждый тег XAML соответствует классу модели, который, в свою очередь, имеет набор свойств, методов и событий. В соответствие с этими членами класса вы можете настраивать ваш XAMLкод. Во время исполнения именно экземпляры этих классов создаются рантаймом для того, чтобы отобразить то, что вы указали в XAML, – очень похоже на ASP.NET и его серверные контролы.

Элементы XAML Основное деление элементов XAML таково:

Контейнеры (панели) Элементы управления Службы документов (document services) Графические примитивы Панели С помощью панелей вы можете располагать содержащиеся внутри них элементы. Среди стандартных панелей есть Canvas (дочерние элементы размещаются с использованием относительных координат), DockPanel (панель, в которой дочерние элементы стыкуются), FlowPanel (напоминает джавский FlowLayout, где элементы выводятся в ряд друг за другом), GridPanel (табличная организация сыновей) и некоторые другие. Естественно, вы можете определять свои типы панелей.

Пример панели:

Pages:     || 2 | 3 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.