Visual Studio 2008. Краткий обзор ключевых новинок

Часть 4. Создание Windows-приложений

Алексей Федоров

Технология Windows Forms

Формы и компоненты (Control, UserControl, Form)

Меню, панели задач и панели статуса

Интерфейсные элементы

Управление расположением компонентов

Использование данных

Диалоговые панели общего назначения

Дополнительные компоненты

Отображение данных

Развертывание приложений — технология ClickOnce

Сервисы для клиентских приложений

Поддержка Windows Vista

Технология Windows Presentation Foundation

Компоненты WPF-приложений

Расположение элементов

Ввод данных и генерация команд

Связь с данными

Графика

Медиа и графика

Текст и шрифты

Документы

Типы WPF-приложений

Основные новинки в Visual Studio 2008

Основные новинки в Windows Presentation Foundation 3.5

Совместимость с версией 3.0

Прикладная модель

Графика

Трехмерная графика

Связь с данными

Компоненты

Документы

Аннотации

Взаимодействие Windows Forms и Windows Presentation Foundation

 

Создание Windows-приложений, или, как их еще называют, толстых клиентов, возможно в Visual Studio 2008 с использованием двух ключевых компонентов .NET Framework: Windows Forms (появился в .NET Framework 1.0) и Windows Presentation Foundation (WPF; появился в ноябре 2006 года в составе .NET Framework 3.0).

Технология Windows Forms

Технология Windows Forms (пространство имен System.Windows.Forms) представляет собой набор классов .NET, реализующих функциональность, присущую стандартным и расширенным компонентам Windows-приложений. Разработчики используют формы и диалоговые окна в качестве контейнеров для размещения различных интерфейсных элементов: кнопок, меню, полей ввода, полей выбора и т.п. Каждый такой интерфейсный элемент представлен соответствующим классом и поддерживает набор методов, свойств и обработчиков событий, которые можно применять для управления представлением компонентов и обеспечения реакции на действия пользователей, производимые с этими компонентами. Классы, реализованные в пространстве имен System.Windows.Forms, можно разделить на несколько функциональных групп, которые мы кратко рассмотрим далее.

Формы и компоненты (Control, UserControl, Form)

Большинство классов, определенных в пространстве имен System.Windows.Forms, наследуют от класса Control. Данный класс обеспечивает базовую функциональность для всех компонентов, которые могут отображаться на форме. Класс Form представляет собой окно Windows-приложения. К окнам относятся диалоговые панели, немодальные окна, MDI-клиенты и родительские окна. В качестве основы для создания собственных интерфейсных элементов следует использовать класс UserControl.

Меню, панели задач и панели статуса

В состав Windows Forms входит большой набор классов, позволяющих создавать собственные панели задач и меню, поддерживающие различные визуальные стили и представления. Для создания панелей задач, меню, контекстных меню и панелей статуса следует использовать классы ToolStrip, MenuStrip, ContextMenuStip и StatusStrip соответственно.

Интерфейсные элементы

В пространстве имен System.Windows.Forms содержится множество классов, реализующих основные интерфейсные элементы Windows-приложений. Компоненты TextBox и ComboBox предназначены для ввода данных, а Label и ListView служат для отображения данных. В пространстве имен System.Windows.Forms также есть компоненты, используемые для активизации каких-либо действий, например Button. Для отображения HTML-документов в Windows-приложениях применяются компонент WebBrowser и соответствующие классы, например HtmlDocument. Компонент MaskedTextBox представляет собой расширенное средство ввода данных на основе шаблонов. При необходимости создания собственного дизайнера форм можно использовать компонент PropertyGrid, отображающий таблицу свойств компонентов, которые можно изменять.

Управление расположением компонентов

Ряд классов из пространства имен System.Windows.Forms используется для управления расположением компонентов на формах или в составе других компонентов. К таким классам относятся FlowLayoutPanel, TableLayoutPanel и SplitContainer. Класс FlowLayoutPanel представляет собой панель, которая динамически размещает свое содержимое горизонтально или вертикально. Класс TableLayoutPanel служит для задания ячеек и рядов для расположения элементов в фиксированной таблице. Класс SplitContainer используется для разделения формы на две или более частей с возможностью изменения размеров каждой из них.

Использование данных

В Windows Forms поддерживаются богатые возможности по связи компонентов с различными источниками данных — базами данных и XML-файлами. Компонент DataGridView представляет собой настраиваемую таблицу для отображения данных с возможностью управления ячейками, рядами, колонками и рамками. Компонент BindingNavigator служит для навигации по данным, отображаемым в форме, и обычно применяется совместно с компонентом BindingSource для перемещения по записям в источнике данных.

Диалоговые панели общего назначения

В Windows поддерживается ряд диалоговых панелей общего назначения, которые используются для унификации таких пользовательских операций, как открытие и сохранение файлов, манипуляции со шрифтами и цветами, а также вывод данных на устройства печати. Классы OpenFileDialog и SaveFileDialog реализуют соответственно отображение диалоговых панелей, позволяющих пользователям выбрать местоположение файла, который планируется открыть или сохранить. Класс FontDialog отображает диалоговую панель для выбора шрифтов, применяемых в приложении. Класс ColorDialog используется для отображения стандартной панели выбора цветов и задания собственных цветовых комбинаций.

Классы PageSetupDialog, PrintPreviewDialog и PrintDialog применяются для отображения диалоговых панелей, позволяющих пользователям управлять различными аспектами вывода информации на устройства печати. Сами же функции управления печатью реализованы в пространствах имен System.Drawing.Printing и System.Windows.Forms.Printing.

Помимо стандартных диалоговых панелей в пространстве имен System.Windows.Forms реализован класс MessageBox, который может использоваться в различных ситуациях, требующих отображения панели сообщений и интерактивного ввода данных от пользователей.

Дополнительные компоненты

Помимо рассмотренных выше компонентов в пространстве имен System.Windows.Forms есть ряд классов, которые не наследуют от класса Control, но, тем не менее, представляют собой визуальные компоненты, которые можно использовать при создании Windows-приложений. К таким классам относятся, например, ToolTip, ErrorProvider, Help и HelpProvider. Класс ToolTip применяется для отображения краткого описания назначения компонента. Класс ErrorProvider служит для отображения информации об ошибках, а классы Help и HelpProvider — справочной информации для пользователей приложения.

Дочерние пространства имен System.Windows.Forms отвечают за расширенную функциональность, связанную с разработкой и выполнением Windows-приложений. К таким пространствам имен относятся:

  • System.Windows.Forms.ComponentModel.Com2Interop — содержит вспомогательные классы для отображения панелей свойств компонентов в режиме дизайна;
  • System.Windows.Forms.Design — содержит классы, используемые для обеспечения конфигурируемости компонентов Windows Forms в режиме дизайна. Эти классы состоят из класса-дизайнера и набора сервисов, доступных в режиме дизайна. Также в данном пространстве имен есть класс UITypeEditor, применяемый для установки значений ряда типов свойств, и классы, обеспечивающие импорт компонентов ActiveX;
  • System.Windows.Forms.Design.Behavior — содержит классы для создания расширений пользовательского интерфейса и поддержки таких расширений в режиме дизайна. В данное пространство имен включены следующие классы:
    • Glyph для обработки отрисовки и щелчков мышью,
    • Adorner для управления коллекцией классов типа Glyph,
    • BehaviourService для управления расширениями интерфейсных элементов в режиме дизайна,
    • SnapLine для отображения горизонтальных и вертикальных сегментов, позволяющих пользователям выравнивать компоненты в режиме дизайна;
  • System.Windows.Forms.Integration — обеспечивает интеграцию между компонентами Windows Forms и Windows Presentation Foundation (WPF). Содержит классы, позволяющие использовать компоненты Windows Forms на страницах, созданных средствами Windows Presentation Foundation, и компоненты Windows Presentation Foundation в приложениях на основе Windows Forms. Два ключевых класса обеспечивают интеграционные возможности двух технологий — WindowsFormsHost и ElementHost. Класс WindowsFormsHost используется при необходимости отображения компонента Windows Forms на странице, созданной средствами Windows Presentation Foundation. Класс ElementHost служит для отображения элементов WPF в приложениях на основе Windows Forms;
  • System.Windows.Forms.Layout — содержит классы, используемые для реализации механизмов расположения элементов на формах или в составе других компонентов. К таким классам относятся LayoutEngine и ArrangedElementCollection. Первый служит в качестве абстрактного класса, используемого компонентами TableLayoutPanel и FlowLayoutPanel для реализации различных способов расположения компонентов. Второй представляет собой коллекцию объектов, которые находятся под управлением LayoutEngine;
  • System.Windows.Forms.PropertyGridInternal — обеспечивает поддержку реализации компонента PropertyGrid, который применяется для отображения таблицы свойств компонентов в режиме дизайна;
  • System.Windows.Forms.VisualStyles — содержит классы, обеспечивающие отображение компонентов и других интерфейсных элементов Windows-приложений с использованием визуальных стилей. В состав данного пространства имен входят следующие основные классы:
    • VisualStyleElement является базовым классом для задания визуальных стилей, поддерживаемых компонентом или интерфейсным элементом. Помимо VisualStyleElement в пространстве имен System.Windows.Forms.VisualStyles содержится большое число вложенных классов, унаследованных от VisualStyleElement, статические свойства которых возвращают визуальные свойства для каждого возможного состояния компонента, части компонента или интерфейсного элемента, поддерживающего визуальные стили. Например, свойство Pressed класса VisualStyleElement.Button.PushButton возвращает тип VisualStyleElement, идентифицирующий визуальный стиль для кнопки в нажатом состоянии,
    • VisualStyleRenderer предоставляет методы для отрисовки и получения информации о каждом визуальном элементе (VisualStyleElement) для визуального стиля, поддерживаемого операционной системой, — размер по умолчанию, тип фона и фонового изображения, набор цветов и т.п.,
    • VisualStyleInformation предоставляет набор статических свойств для получения информации о текущем визуальном стиле, поддерживаемом операционной системой.

Разработка Windows-приложений выполняется на основе шаблона Windows Forms Application, доступного в ветви Windows для выбранного языка программирования — Visual Basic .NET или Visual C#. Входящий в состав Visual Studio 2008 дизайнер позволяет создавать Windows-приложения перетаскиванием компонентов из палитры доступных компонентов (ToolBox) на поверхность формы и написанием кода для обработки событий, возникающих при активации пользователями тех или иных компонентов, расположенных на форме, а также событий, отражающих жизненный цикл самого Windows-приложения (рис. 1).

 

Рисунок

Рис. 1. Дизайнер Windows-приложений в Visual Studio

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

 

Рисунок

Рис. 2. Палитра компонентов для Windows-приложений

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

Отображение данных

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

Источники данных, доступные для приложения в режиме разработки, перечислены в специальном окне Visual Studio — Data Sources. В нем отображаются различные источники данных — базы данных, web-сервисы, объекты в рамках данного проекта и т.п. Создание компонентов, обеспечивающих связь с данными, осуществляется простым перетаскиванием источника данных на форму, включенную в состав проекта. Создать компоненты связи с данными также можно перетаскиванием объектов из окна Data Sources на существующие компоненты, расположенные на форме.

В состав Windows Forms входит компонент, специально разработанный для табличного отображения данных, — DataGridView. Разработчикам предоставляются широкие возможности по управлению этим компонентом: можно изменять настройки ячеек, фиксировать размеры и местоположение определенных рядов и колонок, отображать компоненты внутри ячеек и т.п.

Для обеспечения связи с источниками данных используется компонент BindingSource, который впервые появился в Visual Studio 2005 в составе .NET Framework 2.0. Он представляет собой соединение с источником данных и предоставляет методы для связи компонентов с данными, перемещения по записям, редактирования записей и сохранения изменений непосредственно в источнике данных. Компонент BindingNavigator обеспечивает простой пользовательский интерфейс на основе компонента BindingSource, который позволяет перемещаться между записями в источнике данных.

Развертывание приложений — технология ClickOnce

После того как приложение создано и отлажено, необходимо обеспечить возможность передачи его конечным пользователям. При использовании технологии ClickOnce вы можете развертывать приложения непосредственно из Visual Studio, указав адрес web-сайта, на котором оно будет расположено. Технология ClickOnce управляет всеми элементами и зависимостями вашего приложения и гарантирует корректную установку приложения на клиентском компьютере.

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

При обновлении приложения пользователь публикует новый манифест развертывания (deployment manifest) и новую копию приложения на web-сервере. Технология ClickOnce обнаруживает наличие обновлений и обновляет пользовательские версии, заменяя компоненты приложения и сборки на более новые версии — все это происходит автоматически, написание дополнительного кода не требуется.

В Visual Studio 2008 и .NET Framework 3.5 был реализован ряд улучшений в технологии ClickOnce. К ним относятся поддержка развертывания приложений с нескольких сайтов без необходимости изменения манифестов и возможность управления внешним видом пакетов инсталляции (third-party branding). Утилита Mage.exe, используемая для генерации и редактирования манифестов, применяемых для развертывания приложений средствами ClickOnce, была обновлена до версии 3.5 и теперь поддерживает все ключевые возможности данной технологии.

Развертывание приложений с применением механизма Windows Installer теперь поддерживает новую версию .NET Framework (.NET Framework Launch Condition поддерживает версии 3.0 и 3.5) и полностью совместимо с Windows Vista даже при установке с использованием User Account Control (UAC).

Сервисы для клиентских приложений

Сервисы для клиентских приложений — это новинка в .NET Framework 3.5, позволяющая Windows-приложениям (включая приложения, созданные средствами Windows Forms и Windows Presentation Foundation) обращаться к сервисам ASP .NET, таким как идентификация, роли и профили. Эти сервисы дают разработчикам возможность аутентифицировать пользователей и получать данные о пользовательских ролях и настройках приложения, хранящихся на сервере.

Для включения поддержки сервисов для клиентских приложений необходимо сконфигурировать провайдеров клиентских сервисов в конфигурационном файле приложения или в дизайнере проектов Visual Studio (рис. 3). Эти провайдеры подключаются к серверу через модель расширения и позволяют приложениям обращаться к web-сервисам через стандартные программные интерфейсы для получения данных об аутентификации, ролях и настройках. Сервисы клиентских приложений также поддерживают работу в отсоединенном режиме — в этом случае используются данные, сохраненные в локальном кэше данных.

 

Рисунок

Рис. 3. Конфигурация сервисов клиентских приложений

Для проверки пользователей через существующие сервисы аутентификации ASP .NET AJAX используется статический метод Membership.ValidateUser. Он обращается к провайдеру клиентских сервисов и возвращает значение типа Boolean, указывающее на результат проверки пользователя.

Для получения ролевой информации от ролевых сервисов ASP .NET AJAX применяется метод IsInRole интерфейса IPrincipal, получаемого из статического свойства Thread.CurrentPrincipal. Метод IsInRole требует указания имени роли в качестве параметра и возвращает значение типа Boolean, указывающее на принадлежность пользователя к указанной роли.

Сервисы клиентских приложений также можно применять для получения пользовательских настроек, хранящихся в сервисе профилей ASP .NET AJAX. Клиентский сервис обращения к настройкам на сервере интегрирован с сервисами хранения прикладных настроек, которые появились в .NET Framework 2.0. Для получения настроек необходимо сгенерировать класс Settings для вашего проекта, используя вкладку Settings в дизайнере проектов Visual Studio. На странице Settings следует применить кнопку Load Web Settings для получения настроек с сервера и добавления их в класс Settings, который будет содержать настройки для всех аутентифицированных пользователей или всех анонимных пользователей.

На C# настройки доступны через Properties.Settings.Default, а на Visual Basic — через My.Settings.

Классы, перечисленные в табл. 1, обеспечивают поддержку сервисов для клиентских приложений.

Поддержка Windows Vista

Приложения, созданные с использованием технологии Windows Forms, должны работать под управлением Windows Vista без каких-либо проблем. Более того, в большинстве случаев интерфейс подобных приложений будет обновлен таким образом, как будто они были специально написаны для Windows Vista. Например, обновлены диалоговые панели общего назначения (см. классы типа CommonFileDialog). Помимо этого в .NET Framework 3.5 обеспечена поддержка иконки Shield (свойство Shield в классе SystemIcons), используемой в User Account Control (UAC).

В среде разработки Visual Studio 2008 также появилась возможность автоматической генерации манифестов для Windows-приложений. Доступ к манифесту по умолчанию (файл app.manifest) осуществляется нажатием кнопки View UAC Settings в панели настроек свойств проекта на вкладке Application (рис. 4).

 

Рисунок

Рис. 4. Панель настройки свойств проекта

Технология Windows Presentation Foundation

Вторая технология для создания Windows-приложений — это Windows Presentation Foundation (WPF). WPF — один из ключевых компонентов .NET Framework 3.0, который пополнился рядом расширений и дополнений в новой версии библиотеки классов — .NET Framework 3.5. Приложения на основе WPF создаются с помощью специального шаблона проекта — WPF Application, который доступен для типов проектов Windows на языках программирования Visual Basic .NET и Visual C#.

Создание WPF-приложений практически не отличается от создания приложений на основе Windows Forms: нужно перетащить компоненты на форму и создать обработчики событий. Но есть и ряд существенных отличий: в среде разработчика, помимо дизайнера, окна настройки свойств и галереи компонентов, есть еще окно, содержащее код на языке XAML, — eXtensible Application Markup Language. Этот язык используется в WPF для описания пользовательского интерфейса.

Например, на языке XAML описание основного окна приложения выглядит следующим образом:

<Window x:Class=»Window1»

xmlns=»http://schemas.microsoft.com/winfx/2006/xaml/presentation»

xmlns:x=»http://schemas.microsoft.com/winfx/2006/xaml»

Title=»Window1» Height=»300» Width=»300»>

<Grid>

</Grid>

</Window>

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

Язык XAML представляет собой иерархическую организацию элементов, каждый из которых заключен в угловые скобки. Например, кнопка будет описана так:

<Button></Button>

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

<Button Height=”23”></Button>

При перетаскивании компонентов из галереи в дизайнер Visual Studio автоматически генерирует соответствующий XAML-код. Например, при перетаскивании кнопки на форму будет сгенерирован следующий код:

<Button Height=»23» HorizontalAlignment= »Left» Margin=»10,10,0,0»

Name=»Button1» VerticalAlignment=»Top» Width=»75»>Button</Button>

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

Sub ButtonOKClicked(ByVal Sender As Object, _

ByVal e As RoutedEventArgs)

End Sub

Компоненты WPF-приложений

Как уже было сказано, в WPF-приложениях, подобно приложениям на основе Windows Forms, также используются компоненты (рис. 5). В табл. 2 перечислены основные группы компонентов, применяемых в WPF-приложениях. Все они описаны в пространстве имен System.Windows.Controls.

 

Рисунок

Рис. 5. Ключевые сервисы Windows Presentation Foundation

Ввод данных и генерация команд

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

Расположение элементов

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

Система управления расположением интерфейсных элементов базируется на ряде компонентов, входящих в состав WPF:

  • Canvas — дочерние компоненты могут сами управлять своим расположением;
  • DockPanel — дочерние компоненты выравниваются по краям панели;
  • Grid — дочерние компоненты располагаются в рядах и колонках;
  • StackPanel — дочерние компоненты накладываются друг на друга вертикально или горизонтально;
  • VirtualizingStackPanel — дочерние компоненты выравниваются по одной линии — горизонтальной или вертикальной;
  • WrapPanel — дочерние компоненты располагаются слева направо и «заворачивают» на следующую строку, когда заканчивается место на текущей строке.

Связь с данными

В основе возможности WPF отображать данные из различных источников лежит класс Binding, в задачу которого входит связь определенного компонента с источником данных. Так же как и в Windows Forms, в WPF поддерживаются механизмы отображения данных, навигации по данным и внесения изменений в оригинальные данные в случае их изменения в компоненте.

Все, что мы рассматривали выше, в той или иной мере можно реализовать и при помощи технологии Windows Forms. Реальные преимущества использования технологии Windows Presentation Foundation заключаются в мощном графическом ядре и программном интерфейсе для отрисовки различных графических элементов, которые мы рассмотрим далее.

Графика

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

 

Двумерные примитивы

В WPF поддерживаются основные двумерные векторные примитивы — прямоугольники, эллипсы и т.п. Такие примитивы могут быть интерактивными — они реагируют на ввод с клавиатуры или манипуляции мышью.

 

Двумерная геометрия

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

 

Двумерные эффекты

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

 

Трехмерная отрисовка

В состав Windows Presentation Foundation также входит поддержка трехмерной графики и отрисовки, интеграция которой с двумерной графикой позволяет создавать различные представления данных.

 

Анимация

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

Медиа и графика

В Windows Presentation Foundation полноценно реализована поддержка аудиовизуальных данных (для этого используется элемент MediaElement) — таким образом, в приложениях можно применять графические изображения, видео- и аудиоинформацию.

Текст и шрифты

Для обеспечения отрисовки текстовой информации в состав Windows Presentation Foundation включены следующие возможности:

  • поддержка шрифтов OpenType;
  • расширения технологии ClearType;
  • возможность использования аппаратных ускорителей;
  • возможность интеграции текстовой информации, мультимедийных данных, графики и анимации;
  • поддержка локальных версий шрифтов и возможность подстановки шрифтов в случае их отсутствия.

Документы

В Windows Presentation Foundation реализована полноценная поддержка работы с тремя типами документов:

  • документы с нефиксированным отображением (flow documents) — оптимизированы для просмотра и отображения и могут динамически реагировать на изменение размеров окон или настроек дисплея;
  • документы с фиксированным отображением (fixed documents) — предназначены для точного отображениях их содержимого (принцип What You See Is What You Get, WYSIWYG) и вывода на устройство печати;
  • документы, созданные в соответствии со спецификацией XML Paper Specification (XPS), — являются расширенной версией документов с фиксированным отображением. XPS-документы описываются XML-схемой и представляют собой постраничное отображение электронного документа. Спецификация XPS является открытой, кроссплатформенной и позволяет существенно упростить создание, распространение, вывод на устройства печати и архивирование документов. К основным характеристикам XPS-документов относятся:
    • упаковка XPS-документов в виде файлов ZipPackage, которые соответствуют спецификации Open Packaging Conventions (OPC). Для этого используется программный интерфейс System.IO.Packaging,
    • возможность отображения документов в браузере и обычном приложении,
    • возможность создания и управления документами из WPF-приложений,
    • поддержка на уровне спулера Windows Vista,
    • поддержка на уровне принтеров ведущих производителей,
    • интеграция с компонентом DocumentViewer, используемым для отображения документов.

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

Типы WPF-приложений

Существует два типа WPF-приложений: так называемые полноценные приложения, которые выполняются как обычные Windows-приложения, и приложения, выполняемые в браузере (XAML Browser Applications, XBAP-приложения).

При создании полноценных приложений пользователь оперирует такими элементами, как Window для создания окон и диалоговых панелей, которые могут быть доступны при активации соответствующих команд меню или панелей задач. Помимо этого возможно использование панелей сообщений и стандартных диалоговых панелей — MessageBox, OpenFileDialog, SaveFileDialog и PrintDialog.

При создании приложений, выполняемых в браузере, пользователь создает страницы (Page) и страничные функции (PageFunction(T)). Навигация по страницам осуществляется с помощью гипертекстовых ссылок (класс Hyperlink). WPF-приложения могут размещаться в Internet Explorer версий 6 и 7. Существуют две дополнительные возможности хостинга WPF-приложений в браузере — использование фреймов для отображения страниц в рамках окна или замена всего окна на компонент NavigationWindow.

Основные новинки в Visual Studio 2008

Самой важной новинкой в Visual Studio 2008 стало включение в состав продукта полноценного дизайнера WPF-приложений (рис. 6). Он поддерживает создание и редактирование XAML-файлов с полной поддержкой Intellisense, интеграцию с редакторами кода на VB .NET и С# для написания обработчиков событий, возможность работы с несколькими окнами (например, в одном окне отображается XAML-код, а в другом — его визуальное представление), а также режим дизайна с использованием Visual Design Surface с возможностью перетаскивания компонентов из галереи редактирования их свойств в специальном окне и применением компонентов-контейнеров типа Grid, Canvas и DockPanel или StackPanel для расположения компонентов на форме.

 

Рисунок

Рис. 6. Дизайнер WPF-приложений

Основные новинки в Windows Presentation Foundation 3.5

Далее мы рассмотрим основные изменения и дополнения в версии Windows Presentation Foundation 3.5.

Совместимость с версией 3.0

  • Все приложения, созданные для WPF 3.0, будут корректно работать под управлением WPF 3.5;
  • если приложения, созданные для WPF 3.5, используют функции, поддерживаемые в версии 3.0, то они будут корректно работать под управлением WPF 3.0;
  • в WPF 3.5 применяется новое пространство имен — http://schemas.microsoft.com/netfx/2007/xaml/presentation. Его рекомендуется использовать при создании приложений для WPF 3.5. Помимо этого можно применять и пространство имен, определенное для WPF 3.0.

Прикладная модель

В версии 3.5 появился ряд изменений в прикладной модели WPF. К таким изменениям, в частности, относятся:

  • поддержка моделей расширения для визуальных и невизуальных компонентов, выполняющихся как самостоятельные приложения или как XBAP-приложения. Модули расширения создаются на базе классов, реализованных в пространстве имен System.AddIn и компонента FrameworkElement;
  • поддержка выполнения XBAP-приложений под управлением браузера Firefox 2.0 — для этого необходимо использовать plug-in for WPF 3.5;
  • возможность обмена cookie между XBAP- и web-приложениями, выполняющимися в рамках одного сайта;
  • улучшенная поддержка IntelliSense для XAML;
  • расширенная поддержка локализации приложений.

Графика

У разработчиков появилась возможность кэшировать графические изображения, загружаемые по протоколу HTTP в локальном кэше (Microsoft Internet Explorer Temporary File Cache), — таким образом, последующие загрузки файлов будут происходить с локального диска, а не из Интернета. В зависимости от размера графического изображения можно получить значительные улучшения в производительности приложений. Возможность кэширования поддерживается следующими функциями:

  • BitmapImage.UriCachePolicy;
  • BitmapDecoder.Create(Uri, BitmapCreateOptions, BitmapCacheOption,
  • RequestCachePolicy);
  • BitmapFrame.Create(Uri, RequestCachePolicy);
  • BitmapFrame.Create(Uri, BitmapCreateOptions, BitmapCacheOption, RequestCachePolicy).

Событие BitmapSource.DecodeFailed возникает в тех случаях, когда невозможна загрузка графического изображения из-за нарушений данных в заголовке изображения.

Трехмерная графика

В объектной модели поддержки трехмерной графики появились следующие расширения:

  • обеспечивается поддержка концепций UIElement — ввод данных, фокус, событийная модель и т.п. Новые классы — UIElement3D и унаследованные от него ContainerUIElement3D и ModelUIElement3D, появившиеся в WPF 3.5, — полностью поддерживают эти возможности;
  • новый класс Viewport2DVisual3D обеспечивает поддержку размещения интерактивных двумерных элементов в трехмерных объектах;
  • реализованы новые сервисы трансформации — GeneralTransform3D и GeneralTransform2DTo3D. Класс GeneralTransform3DTo2D позволяет выполнять трансформации между объектами Visual3D и двух- и трехмерными объектами в обе стороны.

Связь с данными

В WPF 3.5 появился ряд расширений для механизмов связи компонентов с данными. К ним относятся:

  • новый механизм отладки, позволяющий более просто отлаживать связи компонентов с данными. Новое свойство PresentationTraceSources.TraceLevel, которое может использоваться с объектами, участвующими в обеспечении связи с данными, позволяет получать информацию о статусе текущей связи. Статический класс PresentationTraceSources реализован в пространстве имен System.Diagnostics;
  • проверка на уровне модели данных с поддержкой интерфейса IDataErrorInfo, который позволяет бизнес-объектам проверять валидность вводимых данных. Данный интерфейс задает индексатор, который получает на вход имя свойства, а возвращает строку, используя новое правило проверки вводимой информации — DataErrorValidationRule;
  • в классах Binding и MultiBinding появились два новых свойства — ValidatesOnExceptions и ValidatesOnDataErrors, которые могут использоваться вместо правил ExceptionValidationRule и DataErrorValidationRule;
  • модель связи с данными с поддержкой LINQ и XLINQ на уровне BindingListCollectionView — этот механизм позволяет осуществлять связь с данными через коллекции BindingList(T).

Компоненты

В Windows Presentation Foundation 3.5 произошел ряд изменений в некоторых компонентах — далее мы кратко рассмотрим эти изменения.

В компоненте TextBox появилась поддержка Input Method Editor (IME). В классе FrameworkTextComposition реализован ряд новых свойств — CompositionOffset, CompositionLength, ResultOffset и ResultLength. Класс FrameworkTextComposition используется как свойство TextCompositionEventArgs.TextComposition, когда пользователь вводит текст в компоненте TextBox с помощью средств Input Method Editor (IME) и возникают события TextInput, TextInputUpdate или TextInputStart.

В компоненте RichTextBox теперь сохраняются расширенные объекты типа TextElement — это происходит при сохранении объекта TextElement и при работе с областью обмена данными. Такая возможность поддерживается на уровне перечисленных ниже классов:

  • класс TextRange содержит новый метод Save(Stream, String, Boolean), последний параметр которого указывает, требуется поддержка объектов TextElement или нет;
  • класс TextElementEditingBehaviorAttribute позволяет указать атрибуты для расширенного объекта TextElement: если значения атрибутов TextElementEditingBehaviorAttribute.IsMergeable и TextElementEditingBehaviorAttribute.IsTypographicOnly равны false, то RichTextBox сохраняет содержимое объекта TextElement при редактировании содержимого RichTextBox. Новое свойство IsDocumentEnabled, появившееся у компонента RichTextBox, позволяет указать, должны ли интерфейсные элементы принимать данные от пользователя;
  • класс TextBoxBase пополнился новым свойством — UndoLimit, которое позволяет указать максимальное число действий, запоминаемых компонентом.

Компонент SoundPlayerAction теперь может загружать аудиофайлы, расположенные по URI-адресам.

Документы

У классов FlowDocumentPageViewer, FlowDocumentScrollViewer и FlowDocumentReader появилось свойство Selection, которое возвращает свойство TextSelection, представляющее выбранный в документе фрагмент.

Аннотации

Поддержка механизмов аннотаций расширилась возможностью обнаружения соответствий аннотаций аннотированным объектам. Новый интерфейс IAnchorInfo и новый метод GetAnchorInfo добавлены в класс AnnotationHelper, который используется для реализации описанной выше функциональности.

Взаимодействие Windows Forms и Windows Presentation Foundation

Для обеспечения взаимодействия Windows Presentation Foundation и Windows Forms существует два подхода. Первый заключается в хостинге WPF-приложений в окне WIn32 — в этом случае вы сможете использовать богатые графические возможности WPF в обычных Windows-приложениях. Ключевой компонент для реализации данного подхода — HwndSource, который обеспечивает взаимодействие двух технологий на уровне ссылок на окно (window handle).

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

***

На этом мы завершаем наше знакомство с ключевыми новинками в .NET Framework 3.5 и Visual Studio 2008, связанными с созданием Windows-приложений. В следующем разделе мы рассмотрим создание web-приложений.

 

В начало В начало

КомпьютерПресс 10'2008

Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует