Язык программирования C#9 и платформа .NET5
<b> </DrawingBrush></b></Button.Background></Button></Page>Независимо от того, какое совместимое с кистью свойство устанавливается с использованием специального объекта
, визуализация двумерного графического изображения в итоге получается с намного меньшими накладными расходами, чем в случае визуализации того же изображения посредством фигур.DrawingBrushВключение типов Drawing в DrawingImage
Тип
позволяет подключать рисованный геометрический объект к элементу управленияDrawingImageиз WPF. Взгляните на следующую разметку:Image<Image><Image.Source><DrawingImage><DrawingImage.Drawing><!--Same GeometryDrawing from above --></DrawingImage.Drawing></DrawingImage></Image.Source></Image>В данном случае элемент
был помещен внутрь элементаGeometryDrawing, а неDrawingImage. С применением элементаDrawingBrushможно установить свойствоDrawingImageэлемента управленияSource.ImageРабота с векторными изображениями
По всей видимости, вы согласитесь с тем, что художнику будет довольно трудно создавать сложное векторное изображение с использованием инструментов и приемов, предоставляемых средой Visual Studio. В распоряжении художников есть собственные наборы инструментов, которые позволяют производить замечательную векторную графику. Изобразительными возможностями подобного рода не обладает ни IDE-среда Visual Studio, ни сопровождающий ее инструмент Microsoft Blend. Перед тем, как векторные изображения можно будет импортировать в приложение WPF, они должны быть преобразованы в выражения путей. После этого можно программировать с применением сгенерированной объектной модели, используя Visual Studio.
На заметку! Используемое изображение (
) и экспортированные данные путей (LaserSign.svg) можно найти в подкаталоге Chapter_26 загружаемого кода примеров. Изображение взято из статьи Википедии по ссылкеLaserSign.xaml.https://ru.wikipedia.org/wiki/Символы_опасностиПреобразование файла с векторной графикой в файл XAML
Прежде чем можно будет импортировать сложные графические данные (такие как векторная графика) в приложение WPF, графику понадобится преобразовать в данные путей. Чтобы проиллюстрировать, как это делается, возьмите пример файла изображения
с упомянутым выше знаком опасности лазерного излучения. Затем загрузите и установите инструмент с открытым кодом под названием.svg(из веб-сайтаInkscape). С помощьюwww.inkscape.orgоткройте файлInkscapeиз подкаталогаLaserSign.svg. Вы можете получить запрос о модернизации формата. Установите настройки, как показано на рис. 26.12.Chapter_26Следующие шаги поначалу покажутся несколько странными, но на самом деле они представляют собой простой способ преобразования векторных изображений в разметку XAML. Когда изображение приобрело желаемый вид, необходимо выбрать пункт меню File► Print (Файл►Печать). В открывшемся окне нужно ввести имя файла и выбрать место, где он должен быть сохранен, после чего щелкнуть на кнопке Save (Сохранить). В результате получается файл
(или*.xps).*.oxpsНа заметку! В зависимости от нескольких переменных среды в конфигурации системы сгенерированный файл будет иметь либо расширение
, либо расширение.xps. В любом случае дальнейший процесс идентичен..oxpsФорматы
и*.xpsв действительности представляют собой архивы ZIP. Переименовав расширение в*.oxps, файл можно открыть в проводнике файлов (либо в 7-Zip или в предпочитаемой утилите архивации). Файл содержит иерархию папок, приведенную на рис. 26.13..zipНеобходимый файл находится в папке
(Pages) и называетсяDocuments/1/Pages. Откройте его в текстовом редакторе и скопируйте в буфер все данные кроме открывающего и закрывающего дескрипторов1.fpage. Данные путей затем можно поместить внутрь элементаFixedPageглавного окна в Kaxaml. В итоге изображение будет показано в окне XAML.CanvasНа заметку! В последней версии
есть возможность сохранить файл в формате Microsoft XAML. К сожалению, на момент написания главы он не был совместим с WPF.InkscapeИмпортирование графических данных в проект WPF
Создайте новый проект приложения WPF по имени
. Измените значения свойствInteractiveLaserSignиHeightэлементаWidthсоответственно наWindowи600и замените элемент650элементомGrid:Canvas<Window x:Class="InteractiveLaserSign.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

