Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

<Image Name="myImage" Height="80"/>

<local:CustomVisualFrameworkElement/>

</StackPanel>

</Window>

Результат выполнения программы показан на рис. 26.15.

Реагирование на операции проверки

попадания

Поскольку класс

DrawingVisual
не располагает инфраструктурой
UIElement
или
FrameworkElement
, необходимо программно добавить возможность реагирования на операции проверки попадания. Благодаря концепции логического и визуального деревьев на визуальном уровне делать это очень просто. Оказывается, что в результате написания блока XAML по существу строится логическое дерево элементов. Однако с каждым логическим деревом связано намного более развитое описание, известное как визуальное дерево, которое содержит низкоуровневые инструкции визуализации.

Упомянутые деревья подробно рассматриваются в главе 27, а сейчас достаточно знать, что до тех пор, пока специальные визуальные объекты не будут зарегистрированы в таких структурах данных, выполнять операции проверки попадания невозможно. К счастью, контейнер

VisualCollection
обеспечивает регистрацию автоматически (вот почему в аргументе конструктора необходимо передавать ссылку на специальный элемент
FrameworkElement
).

Измените код класса

CustomVisualFrameworkElement
для обработки события
MouseDown
в конструкторе класса с применением стандартного синтаксиса С#:

this.MouseDown += CustomVisualFrameworkElement_MouseDown;

Реализация данного обработчика будет вызывать метод

VisualTreeHelper.HitTest
с целью выяснения, находится ли курсор мыши внутри границ одного из визуальных объектов. Для этого в одном из параметров метода
HitTest
указывается делегат
HitTestResultCallback
, который будет выполнять вычисления. Добавьте в класс
CustomVisualFrameworkElement
следующие методы:

void CustomVisualFrameworkElement_MouseDown(object sender, MouseButtonEventArgs e)

{

// Выяснить, где пользователь выполнил щелчок.

Point pt = e.GetPosition((UIElement)sender);

// Вызвать вспомогательную функцию через делегат, чтобы

// посмотреть, был ли совершен щелчок на визуальном объекте.

VisualTreeHelper.HitTest(this, null,

new HitTestResultCallback(myCallback), new PointHitTestParameters(pt));

}

public HitTestResultBehavior myCallback(HitTestResult result)

{

// Если щелчок был совершен на визуальном объекте, то

// переключиться между скошенной и нормальной визуализацией.

if (result.VisualHit.GetType == typeof(DrawingVisual))

{

if (((DrawingVisual)result.VisualHit).Transform == null)

{

((DrawingVisual)result.VisualHit).Transform = new SkewTransform(7, 7);

}

else

{

((DrawingVisual)result.VisualHit).Transform = null;

}

}

//
Сообщить методу HitTest о прекращении углубления в визуальное дерево.

return HitTestResultBehavior.Stop;

}

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

Visual
.

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

Резюме

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

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

Глава 27

Ресурсы, анимация, стили и шаблоны WPF

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

Поделиться:
Популярные книги

Тройняшки не по плану. Идеальный генофонд

Лесневская Вероника
Роковые подмены
Любовные романы:
современные любовные романы
6.80
рейтинг книги
Тройняшки не по плану. Идеальный генофонд

Барон играет по своим правилам

Ренгач Евгений
5. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Барон играет по своим правилам

Завод-3: назад в СССР

Гуров Валерий Александрович
3. Завод
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Завод-3: назад в СССР

Секретарь лорда Демона

Лунёва Мария
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Секретарь лорда Демона

Отец моего жениха

Салах Алайна
Любовные романы:
современные любовные романы
7.79
рейтинг книги
Отец моего жениха

Идеальный мир для Лекаря 10

Сапфир Олег
10. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 10

Я тебя не отпущу

Коваленко Марья Сергеевна
4. Оголенные чувства
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Я тебя не отпущу

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Девочка из прошлого

Тоцка Тала
3. Айдаровы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка из прошлого

Вернуть невесту. Ловушка для попаданки 2

Ардова Алиса
2. Вернуть невесту
Любовные романы:
любовно-фантастические романы
7.88
рейтинг книги
Вернуть невесту. Ловушка для попаданки 2

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Хозяйка дома на холме

Скор Элен
1. Хозяйка своей судьбы
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка дома на холме

Жена проклятого некроманта

Рахманова Диана
Фантастика:
фэнтези
6.60
рейтинг книги
Жена проклятого некроманта

Имя нам Легион. Том 9

Дорничев Дмитрий
9. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 9