Книги онлайн и без регистрации » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 332 333 334 335 336 337 338 339 340 ... 407
Перейти на страницу:
главе рассматривались некоторые аспекты элементов управления WPF, начиная с обзора набора инструментов для элементов управления и роли диспетчеров компоновки (панелей). Первый пример был посвящен построению простого приложения текстового процессора. В нем демонстрировалось использование интегрированной в WPF функциональности проверки правописания, а также создание главного окна с системой меню, строкой состояния и панелью инструментов.

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

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

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

Глава 26

Службы визуализации графики WPF

В настоящей главе рассматриваются возможности графической визуализации WPF. Вы увидите, что инфраструктура WPF предоставляет три отдельных способа визуализации графических данных: фигуры, рисунки и визуальные объекты. Разобравшись в преимуществах и недостатках каждого подхода, вы приступите к исследованию мира интерактивной двумерной графики с использованием классов из пространства имен System.Windows.Shapes. Затем будет показано, как с помощью рисунков и геометрических объектов визуализировать двумерные данные в легковесной манере. И, наконец, вы узнаете, каким образом добиться от визуального уровня максимальной функциональности и производительности.

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

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

Понятие служб визуализации графики WPF

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

По разительному контрасту предшествующие версии API-интерфейсов графической визуализации от Microsoft (включая GDI+ в Windows Forms) были графическими системами прямого режима (immediate mode). В такой модели ответственность за корректное "запоминание" и обновление визуализируемых элементов на протяжении времени жизни приложения возлагалась на программиста. Например, в приложении Windows Forms визуализация фигуры вроде прямоугольника предусматривала обработку события Paint (или переопределение виртуального метода OnPaint()), получение объекта Graphics для рисования прямоугольника и, что важнее всего, добавление инфраструктуры, обеспечивающей сохранение изображения в ситуации, когда пользователь изменил размеры окна (например, за счет создания переменных-членов для представления позиции прямоугольника и вызова метода Invalidate() во многих местах кода).

Переход от графики прямого режима к графике режима сохранения — действительно удачное решение, т.к. программистам приходится писать и сопровождать гораздо меньший объем рутинного кода для поддержки графики. Однако речь не идет о том, что API-интерфейс графики WPF полностью отличается от более ранних инструментальных наборов визуализации. Например, как и GDI+, инфраструктура WPF поддерживает разнообразные типы объектов кистей и перьев, приемы проверки попадания, области отсечения, графические трансформации и т.д. Поэтому если у вас есть опыт работы с GDI+ (или GDI на языке C/C++), то вы уже имеете неплохое представление о способе выполнения базовой визуализации в WPF.

Варианты графической визуализации WPF

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

Фигуры. Инфраструктура WPF предоставляет пространство имен System.Windows.Shapes, в котором определено небольшое количество классов для визуализации двумерных геометрических объектов (прямоугольников, эллипсов, многоугольников и т.п.). Хотя такие типы просты в использовании и очень мощные, в случае непродуманного применения они могут привести к значительным накладным расходам памяти.

Рисунки и геометрические объекты. Второй способ визуализации графических данных в WPF предполагает работу с классами, производными от абстрактного класса System.Windows.Media.Drawing. Используя классы, подобные GeometryDrawing или ImageDrawing (в дополнение к различным геометрическим объектам), можно визуализировать графические данные в более легковесной (но менее функциональной) манере.

Визуальные объекты. Самый быстрый и легковесный способ визуализации графических данных в WPF предусматривает работу с визуальным уровнем, который доступен только через код С#. С применением классов, производных от System.Windows.Media.Visual, можно взаимодействовать непосредственно с графической подсистемой WPF.

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

Важно понимать, что при построении приложения WPF высока вероятность использования всех трех подходов. В качестве эмпирического правила запомните: если нужен умеренный объем интерактивных графических данных, которыми может манипулировать пользователь (принимающих ввод от мыши, отображающих всплывающие подсказки и т.д.), то следует применять члены из пространства имен System.Windows.Shapes.

Напротив, рисунки и геометрические объекты лучше подходят, когда необходимо моделировать сложные и по большей части не интерактивные векторные графические данные с использованием разметки XAML или кода С#. Хотя рисунки и геометрические объекты способны реагировать на события мыши, а также поддерживают проверку попадания и операции перетаскивания, для выполнения таких действий обычно приходится писать

1 ... 332 333 334 335 336 337 338 339 340 ... 407
Перейти на страницу:

Комментарии
Минимальная длина комментария - 20 знаков. В коментария нецензурная лексика и оскорбления ЗАПРЕЩЕНЫ! Уважайте себя и других!
Комментариев еще нет. Хотите быть первым?