Теперь вы понимаете процесс генерации данных путей для сложной графики и знаете, как взаимодействовать с графическими данными в коде. Вы наверняка согласитесь, что наличие у профессиональных художников возможности генерировать сложные графические данные и экспортировать их в виде разметки XAML исключительно важна. После того как графические данные сохранены в файле XAML, разработчики могут импортировать разметку иписать код для взаимодействия с объектной моделью.
Визуализация графических данных с использованием визуального уровня
Последний вариант визуализации графических данных с помощью WPF называется
Далее будет построена небольшая программа, иллюстрирующая основы использования визуального уровня.
Базовый класс Visual и производные дочерние классы
Абстрактный класс System.Windows.Media.Visual
предлагает минимальный набор служб (визуализацию, проверку попадания, трансформации) для визуализации графики, но не предоставляет поддержку дополнительных невизуальных служб, которые могут приводить к разбуханию кода (события ввода, службы компоновки, стили и привязка данных). Класс Visual
является абстрактным базовым классом. Для выполнения действительных операций визуализации должен применяться один из его производных классов. В WPF определено несколько подклассов Visual, в том числе DrawingVisual
, Viewport3DVisual
и ContainerVisual
.
Рассматриваемый ниже пример сосредоточен только на DrawingVisual
— легковесном классе рисования, который используется для визуализации фигур, изображений или текста.
Первый взгляд на класс DrawingVisual
Чтобы визуализировать данные на поверхности с применением класса DrawingVisual
, понадобится выполнить следующие основные шаги:
• получить объект DrawingContext
из DrawingVisual
;
• использовать объект DrawingContext
для визуализации графических данных.
Эти два шага представляют абсолютный минимум, необходимый для визуализации каких-то данных на поверхности. Тем не менее, когда нужно, чтобы визуализируемые графические данные реагировали на вычисления при проверке попадания (что важно для добавления взаимодействия с пользователем), потребуется также выполнить дополнительные шаги:
• обновить логическое и визуальное деревья, поддерживаемые контейнером, на котором производится визуализация;
• переопределить два виртуальных метода из класса FrameworkElement
, позволив контейнеру получать созданные визуальные данные.
Давайте исследуем последние два шага более подробно. Чтобы продемонстрировать применение класса DrawingVisual
для визуализации двумерных данных, создайте в Visual Studio новый проект приложения WPF по имени RenderingWithVisuals
. Первой целью будет использование класса DrawingVisual
для динамического присваивания данных элементу управления Image
из WPF. Начните со следующего обновления разметки XAML окна для обработки события Loaded
:
Title="Fun With Visual Layer" Height="450" Width="800"
Loaded="MainWindow_Loaded">
Замените элемент Grid
панелью StackPanel
и добавьте в нее элемент Image
:
Элемент управления Image
пока не имеет значения в свойстве Source
, т.к. оно будет устанавливаться во время выполнения. С событием Loaded
связана работа по построению графических данных в памяти с применением объекта DrawingBrush
. Удостоверьтесь в том, что файл MainWindow.cs
содержит операторы using для следующих пространств имен:
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
Вот реализация обработчика события Loaded
:
private void MainWindow_Loaded(
object sender, RoutedEventArgs e)
{
const int TextFontSize = 30;
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT