Язык программирования C#9 и платформа .NET5
Шрифт:
Резюме
В главе рассматривались некоторые аспекты элементов управления WPF, начиная с обзора набора инструментов для элементов управления и роли диспетчеров компоновки (панелей). Первый пример был посвящен построению простого приложения текстового процессора. В нем демонстрировалось использование интегрированной в WPF функциональности проверки правописания, а также создание главного окна с системой меню, строкой состояния и панелью инструментов.
Более важно то, что вы научились строить команды WPF. Эти независимые от элементов управления события можно присоединять к элементу пользовательского интерфейса или входному жесту для автоматического наследования готовой функциональности (например, операций с буфером
Кроме того, вы узнали немало сведений о построении пользовательских интерфейсов в XAML и попутно ознакомились с интерфейсом Ink API, предлагаемым WPF. Вы также получили представление об операциях привязки данных WPF, включая использование класса
Наконец, вы выяснили, что инфраструктура WPF добавляет уникальный аспект к традиционным программным примитивам .NET Core, в частности к свойствам и событиям. Как было показано, механизм свойств зависимости позволяет строить свойство, которое может интегрироваться с набором служб WPF (анимации, привязки данных, стили и т.д.). В качестве связанного замечания: механизм маршрутизируемых событий предоставляет событию способ распространяться вверх или вниз по дереву разметки.
Глава 26
Службы визуализации графики WPF
В настоящей главе рассматриваются возможности графической визуализации WPF. Вы увидите, что инфраструктура WPF предоставляет три отдельных способа визуализации графических данных: фигуры, рисунки и визуальные объекты. Разобравшись в преимуществах и недостатках каждого подхода, вы приступите к исследованию мира интерактивной двумерной графики с использованием классов из пространства имен
Попутно затрагиваются многие связанные темы, такие как создание специальных кистей и перьев, применение графических трансформаций к визуализации и выполнение операций проверки попадания. В частности вы увидите, как можно упростить решение задач кодирования графики с помощью интегрированных инструментов Visual Studio и дополнительного средства под названием Inkscape.
На заметку! Графика является ключевым аспектом разработки WPF. Даже если вы не строите приложение с интенсивной графикой (вроде видеоигры или мультимедийного приложения), то рассматриваемые в главе темы критически важны при работе с такими службами, как шаблоны элементов управления, анимация и настройка привязки данных.
Понятие служб визуализации графики WPF
В WPF используется особая разновидность графической визуализации, которая известна под названием графика режима сохранения (retained mode). Выражаясь просто, это означает, что после применения разметки XAML или процедурного кода для генерирования графической визуализации инфраструктура WPF несет ответственность за сохранение визуальных элементов и обеспечение их корректной перерисовки и обновления оптимальным способом. Таким образом, визуализируемые графические данные присутствуют постоянно, даже когда конечный пользователь скрывает изображение, изменяя размер окна или сворачивая его, перекрывая одно окно другим и т.д.
По разительному контрасту предшествующие версии API-интерфейсов графической визуализации от Microsoft (включая GDI+ в Windows Forms) были графическими системами прямого режима (immediate mode). В такой модели ответственность за корректное "запоминание" и обновление визуализируемых элементов на протяжении времени жизни приложения возлагалась на программиста. Например, в приложении Windows Forms визуализация фигуры вроде
Переход от графики прямого режима к графике режима сохранения — действительно удачное решение, т.к. программистам приходится писать и сопровождать гораздо меньший объем рутинного кода для поддержки графики. Однако речь не идет о том, что API-интерфейс графики WPF полностью отличается от более ранних инструментальных наборов визуализации. Например, как и GDI+, инфраструктура WPF поддерживает разнообразные типы объектов кистей и перьев, приемы проверки попадания, области отсечения, графические трансформации и т.д. Поэтому если у вас есть опыт работы с GDI+ (или GDI на языке C/C++), то вы уже имеете неплохое представление о способе выполнения базовой визуализации в WPF.
Варианты графической визуализации WPF
Как и с другими аспектами разработки приложений WPF, существует выбор из нескольких способов выполнения графической визуализации после принятия решения делать это посредством разметки XAML или процедурного кода C# (либо их комбинации). В частности, инфраструктура WPF предлагает следующие три индивидуальных подхода к визуализации графических данных.
• Фигуры. Инфраструктура WPF предоставляет пространство имен
• Рисунки и геометрические объекты. Второй способ визуализации графических данных в WPF предполагает работу с классами, производными от абстрактного класса
• Визуальные объекты. Самый быстрый и легковесный способ визуализации графических данных в WPF предусматривает работу с визуальным уровнем, который доступен только через код С#. С применением классов, производных от
Причина предоставления разных способов решения той же самой задачи (т.е. визуализации графических данных) связана с расходом памяти и в конечном итоге с производительностью приложения. Поскольку WPF является системой, интенсивно использующей графику, нет ничего необычного в том, что приложению требуется визуализировать сотни или даже тысячи различных изображений на поверхности окна, и выбор реализации (фигуры, рисунки или визуальные объекты) может оказать огромное влияние.
Важно понимать, что при построении приложения WPF высока вероятность использования всех трех подходов. В качестве эмпирического правила запомните: если нужен умеренный объем интерактивных графических данных, которыми может манипулировать пользователь (принимающих ввод от мыши, отображающих всплывающие подсказки и т.д.), то следует применять члены из пространства имен