Опубликован: 08.07.2011 | Уровень: для всех | Доступ: платный
Лекция 2:

Основы технологии WPF

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Аннотация: Windows Presentation Foundation (WPF) основывается на векторной системе визуализации и ориентирована на разработку клиентских Windows приложений, базирующихся на технологии Microsoft.NET. Рассматривается архитектура WPF, иерархия основных классов, вопросы построения пользовательского интерфейса, особенности компоновки элементов контроля, основные элементы управления содержимым, их свойства и декларативное описание. Представленная информация о ресурсах, стилях и шаблонах имеет вводный характер по этим достаточно эффективным и разнообразным конструкциям WPF.

Цель

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

Введение в WPF

Windows Presentation Foundation ( WPF ) — система для построения клиентских Windows приложений для технологии Microsoft.NET с визуально привлекательными возможностями взаимодействия с пользователем. С помощью WPF можно создавать широкий спектр как автономных, так и размещенных в браузере приложений [ 12 ] .

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

Графической технологией, лежащей в основе WPF, является DirectX, в отличие от Windows Forms, где используется GDI/GDI+ [ 4 ] . Производительность WPF выше, чем у GDI+ за счёт использования аппаратного ускорения графики через DirectX.

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

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

Основные компоненты архитектуры WPF приведены на рис. 2.1.

Архитектура WPF [4]

увеличить изображение
Рис. 2.1. Архитектура WPF [4]

Компонент PresentationFramework содержит типы WPF верхнего уровня, включая представление окна, панелей и других элементов управления. PresentationCore содержит базовые типы, такие как UIElement и Visual, от которых порождаются все формы и элементы управления. WindowsBase включает различные типы, которые могут использоваться за пределами WPF, в частности, компоненты DispatchObject и DependencyObject. Компонент milcore является ядром визуализации WPF. WindowsCodecs представляет собой низкоуровневый API-интерфейс для поддержки создания изображений. Direct 3D также является низкоуровневым API-интерфейсом, через который осуществляется визуализация всей графики в WPF. User32 используется для определения, какая программа получает тот или иной участок экрана.

Архитектура WPF определяет основные пространства имен для иерархии классов. Базовый набор элементов управления WPF определяет ключевые иерархии классов системы ( рис. 2.2). На рис. 2.2 абстрактные классы изображены овалами, а конкретные классы – прямоугольниками.

Фундаментальные классы WPF [4]

Рис. 2.2. Фундаментальные классы WPF [4]

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

Классы WPF получают поддержку свойств зависимости за счет порождения от класса DependencyObject.

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

Все пользовательские элементы управления являются потомками классов UIElement или FrameworkElement. Класс UIElement поддерживает такую функциональность как компоновка, ввод, фокус и события. Класс FrameworkElement добавляет к функциональности UIElement задание полей, выравнивание, поддержку связывания данных, анимацию и стили.

Класс Shape является базовым для построения таких геометрических форм как прямоугольник, эллипс, многоугольник, линия и путь.

Класс Control определяет элементы управления, которые могут взаимодействовать с пользователем. Это кнопки, списки, текстовые элементы.

Классы ContentControl и ItemsControl являются базовыми для элементов управления, которые могут иметь содержание единственное или коллекцию соответственно.

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

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Александр Петров
Александр Петров

При загрузке данных из БД возникает исключение InvalidOperationException с сообщением: Элемент коллекции должен быть пустым перед использованием ItemsSource. Знаю, что для заполнения DataGrid можно использовать коллекции Items или ItemsSource, но одновременно их использовать нельзя: если задано значение для свойства ItemsSource и в коде C# добавляется элемент в Items, возникает исключение. 
Вопрос, как отследить и отключить добавление элемента в Items?

Максим Спиридонов
Максим Спиридонов

В пятой лекции на второй странице в компиляторе выскакивает ошибка в строчке :

ObjectQuery<Employee> employees = DataEntitiesEmployee.Employees;

Ошибка CS0029

Не удается неявно преобразовать тип "System.Data.Entity.DbSet<WpfApplProject.Employee>" в "System.Data.Entity.Core.Objects.ObjectQuery<WpfApplProject.Employee>".

в using прописал все как положено, здесь похоже именно с преобразованием типов проблемы

Igor Chelyadinski
Igor Chelyadinski
Беларусь, Минск, №54, 2013
Валентина Алешина
Валентина Алешина
Россия