В настоящей главе было закончено построение уровня доступа к данным AutoLot
на основе сведений, полученных в предыдущей главе. С помощью инструментов командной строки EF Core вы создали шаблоны сущностей для существующей базы данных, обновили модель до финальной версии, а также создали и применили миграции. Для инкапсуляции доступа к данным вы добавили хранилища. Написанный код инициализации базы данных способен удалять и заново создавать базу данных повторяемым и надежным способом. В заключение готовый уровень доступа к данным главе был протестирован. На этом тема доступа к данным и Entity Framework Core завершена.
Часть VIII
Разработка клиентских приложений для Windows
Глава 24
Введение в Windows Presentation Foundation и XAML
Когда была выпущена версия 1.0 платформы .NET, программисты, нуждающиеся в построении графических настольных приложений, использовали два API-интерфейса под названиями Windows Forms и GDI+, упакованные преимущественно в сборках System.Windows.Forms.dll
и System.Drawing.dll
. Наряду с тем, что Windows Forms и GDI+ все еще являются жизнеспособными API-интерфейсами для построения традиционных настольных графических пользовательских интерфейсов, начиная с версии .NET 3.0, поставляется альтернативный API-интерфейс с таким же предназначением — Windows Presentation Foundation (WPF). В выпуске .NET Core 3.0 интерфейсы WPF и Windows Forms объединены с семейством .NET Core.
В начале этой вводной главы, посвященной WPF, вы ознакомитесь с мотивацией, лежащей в основе новой инфраструктуры для построения графических пользовательских интерфейсов, что поможет увидеть отличия между моделями программирования Windows Forms/GDI+ и WPF. Затем анализируется роль ряда важных классов, включая Application
, Window
, ContentControl
, Control
, UIElement
и FrameworkElement
.
В настоящей главе будет представлена грамматика на основе XML, которая называется
Глава завершается исследованием визуальных конструкторов WPF, встроенных в Visual Studio, за счет построения вашего первого приложения WPF. Вы научитесь перехватывать действия клавиатуры и мыши, определять данные уровня приложения и выполнять другие распространенные задачи WPF.
Побудительные причины создания WPF
На протяжении многих лет в Microsoft создавали инструменты для построения графических пользовательских интерфейсов (для низкоуровневой разработки на C/C++/Windows API, VB6, MFC и т.д.) настольных приложений. Каждый инструмент предлагает кодовую базу для представления основных аспектов приложения с графическим пользовательским интерфейсом, включая главные окна, диалоговые окна, элементы управления, системы меню и другие базовые аспекты. После начального выпуска платформы .NET инфраструктура Windows Forms быстро стала предпочтительным подходом к разработке пользовательских интерфейсов благодаря своей простой, но очень мощной объектной модели.
Хотя с помощью Windows Forms было успешно создано множество полноценных настольных приложений, дело в том, что данная программная модель несколько System.Windows.Forms.dll
и System.Drawing.dll
не предоставляют прямую поддержку для многих дополнительных технологий, требуемых при построении полнофункционального настольного приложения. Чтобы проиллюстрировать сказанное, рассмотрим узкоспециализированную разработку графических пользовательских интерфейсов до выпуска WPF (табл. 24.1).
Как видите, разработчик, использующий Windows Forms, вынужден заимствовать типы из нескольких несвязанных API-интерфейсов и объектных моделей. Несмотря на то что применение всех разрозненных API-интерфейсов синтаксически похоже (в конце концов, это просто код С#), каждая технология требует радикально иного мышления. Например, навыки, необходимые для создания трехмерной анимации с использованием DirectX, совершенно отличаются от тех, что нужны для привязки данных к экранной сетке. Конечно, программисту Windows Forms чрезвычайно трудно в равной степени хорошо овладеть природой каждого API-интерфейса.
Унификация несходных API-интерфейсов