Теперь вы понимаете процесс генерации данных путей для сложной графики и знаете, как взаимодействовать с графическими данными в коде. Вы наверняка согласитесь, что наличие у профессиональных художников возможности генерировать сложные графические данные и экспортировать их в виде разметки XAML исключительно важна. После того как графические данные сохранены в файле XAML, разработчики могут импортировать разметку иписать код для взаимодействия с объектной моделью.
Визуализация графических данных с использованием визуального уровня
Последний вариант визуализации графических данных с помощью WPF называется
Далее будет построена небольшая программа, иллюстрирующая основы использования визуального уровня.
Базовый класс Visual и производные дочерние классы
Абстрактный класс System.Windows.Media.Visual
Visual является абстрактным базовым классом. Для выполнения действительных операций визуализации должен применяться один из его производных классов. В WPF определено несколько подклассов Visual, в том числе DrawingVisual, Viewport3DVisual и ContainerVisual.Рассматриваемый ниже пример сосредоточен только на DrawingVisual
Первый взгляд на класс DrawingVisual
Чтобы визуализировать данные на поверхности с применением класса DrawingVisual
• получить объект DrawingContext
DrawingVisual;• использовать объект DrawingContext
Эти два шага представляют абсолютный минимум, необходимый для визуализации каких-то данных на поверхности. Тем не менее, когда нужно, чтобы визуализируемые графические данные реагировали на вычисления при проверке попадания (что важно для добавления взаимодействия с пользователем), потребуется также выполнить дополнительные шаги:
• обновить логическое и визуальное деревья, поддерживаемые контейнером, на котором производится визуализация;
• переопределить два виртуальных метода из класса FrameworkElement
Давайте исследуем последние два шага более подробно. Чтобы продемонстрировать применение класса DrawingVisual
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