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

ЖАНРЫ

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

<Path Fill = "Orange" Stroke = "Blue" StrokeThickness = "3">

<Path.Data>

<GeometryGroup>

<EllipseGeometry Center = "75,70" RadiusX = "30" RadiusY = "30" />

<RectangleGeometry Rect = "25,55 100 30" />

<LineGeometry StartPoint="0,0" EndPoint="70,30" />

<LineGeometry StartPoint="70,30" EndPoint="0,30" />

</GeometryGroup>

</Path.Data>

</Path>

Поступая

подобным образом, вы достигаете интерактивности
Path
при чрезвычайной легковесности, присущей геометрическим объектам. Однако если необходимо визуализировать аналогичный вывод и отсутствует потребность в любой (готовой) интерактивности, тогда тот же самый элемент
<GeometryGroup>
можно поместить внутрь
DrawingBrush
:

<DrawingBrush>

<DrawingBrush.Drawing>

<GeometryDrawing>

<GeometryDrawing.Geometry>

<GeometryGroup>

<EllipseGeometry Center = "75,70" RadiusX = "30" RadiusY = "30" />

<RectangleGeometry Rect = "25,55 100 30" />

<LineGeometry StartPoint="0,0" EndPoint="70,30" />

<LineGeometry StartPoint="70,30" EndPoint="0,30" />

</GeometryGroup>

</GeometryDrawing.Geometry>

<!-- Специальное перо для рисования границ -->

<GeometryDrawing.Pen>

<Pen Brush="Blue" Thickness="3"/>

</GeometryDrawing.Pen>

<!-- Специальная кисть для заполнения внутренней области -->

<GeometryDrawing.Brush>

<SolidColorBrush Color="Orange"/>

</GeometryDrawing.Brush>

</GeometryDrawing>

</DrawingBrush.Drawing>

</DrawingBrush>

При помещении группы геометрических объектов внутрь

DrawingBrush
также понадобится установить объект
Pen
, применяемый для рисования границ, потому что свойство
Stroke
больше не наследуется от базового класса
Shape
. Здесь был создан элемент
Pen
с теми же настройками, которые использовались в значениях
Stroke
и
StrokeThickness
из предыдущего примера
Path
.

Кроме того, поскольку свойство

Fill
больше не наследуется от класса
Shape
, нужно также применять синтаксис "элемент-свойство" для определения объекта кисти, предназначенного элементу
DrawingGeometry
, со сплошным оранжевым цветом, как в предыдущих настройках
Path
.

Рисование с помощью DrawingBrush

Теперь объект

DrawingBrush
можно использовать
для установки значения любого свойства, требующего объекта кисти. Например, после подготовки следующей разметки в редакторе Kaxaml с помощью синтаксиса "элемент-свойство" можно рисовать изображение по всей поверхности
Page
:

<Page

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Page.Background>

<DrawingBrush>

<!-- Тот же самый объект DrawingBrush, что и ранее -->

</DrawingBrush>

</Page.Background>

</Page>

Или же элемент

DrawingBrush
можно применять для установки другого совместимого с кистью свойства, такого как свойство
Background
элемента
Button
:

<Page

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Button Height="100" Width="100">

<Button.Background>

<DrawingBrush>

<!-- Тот же самый объект DrawingBrush, что и ранее -->

</DrawingBrush>

</Button.Background>

</Button>

</Page>

Независимо от того, какое совместимое с кистью свойство устанавливается с использованием специального объекта

DrawingBrush
, визуализация двумерного графического изображения в итоге получается с намного меньшими накладными расходами, чем в случае визуализации того же изображения посредством фигур.

Включение типов Drawing в DrawingImage

Тип

DrawingImage
позволяет подключать рисованный геометрический объект к элементу управления
Image
из WPF. Взгляните на следующую разметку:

<Image>

<Image.Source>

<DrawingImage>

<DrawingImage.Drawing>

<!--Same GeometryDrawing from above -->

</DrawingImage.Drawing>

</DrawingImage>

</Image.Source>

</Image>

В данном случае элемент

GeometryDrawing
был помещен внутрь элемента
DrawingImage
, а не
DrawingBrush
. С применением элемента
DrawingImage
можно установить свойство
Source
элемента управления
Image
.

Поделиться с друзьями: