При загрузке данных из БД возникает исключение InvalidOperationException с сообщением: Элемент коллекции должен быть пустым перед использованием ItemsSource. Знаю, что для заполнения DataGrid можно использовать коллекции Items или ItemsSource, но одновременно их использовать нельзя: если задано значение для свойства ItemsSource и в коде C# добавляется элемент в Items, возникает исключение. |
Основы технологии 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.
Компонент 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 являются производными от абстрактного класса DispatcherObject. WPF основана на системе обмена сообщениями, которые для пользовательского интерфейса формируются в одном потоке, который управляется и контролируется диспетчером. Класс DispatcherObject обеспечивает для каждого интерфейсного элемента приложения проверку выполнения в потоке и доступ к диспетчеру.
Классы WPF получают поддержку свойств зависимости за счет порождения от класса DependencyObject.
Класс Visual является единичным объектом, который инкапсулирует инструкции и подробности, а также базовую функциональность рисования. Интерфейсные элементы WPF для визуализации должны порождаться, в конечном счете, от класса Visual.
Все пользовательские элементы управления являются потомками классов UIElement или FrameworkElement. Класс UIElement поддерживает такую функциональность как компоновка, ввод, фокус и события. Класс FrameworkElement добавляет к функциональности UIElement задание полей, выравнивание, поддержку связывания данных, анимацию и стили.
Класс Shape является базовым для построения таких геометрических форм как прямоугольник, эллипс, многоугольник, линия и путь.
Класс Control определяет элементы управления, которые могут взаимодействовать с пользователем. Это кнопки, списки, текстовые элементы.
Классы ContentControl и ItemsControl являются базовыми для элементов управления, которые могут иметь содержание единственное или коллекцию соответственно.
Класс Panel является базовым для всех контейнеров компоновки – элементов, которые могут содержать один или большее число дочерних элементов.