Язык программирования 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
.
Поделиться с друзьями: