Главная » WPF » Рисунки

0

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

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

Все идеи, которые мы рассматривали до сих пор, вращаются  вокруг понятия древовидной иерархии.  Так,  любой  элемент  управления находится  в каком то месте дерева отображения и может иметь одного родителя  и одного или несколь ких потомков.  Рисунок  же обладает иной структурой,  он представляется в виде графа. Один и тот же рисунок может присутствовать в нескольких  вершинах гра фа, что дает заметный  выигрыш в производительности.

Рис. 5.18. Использование кисти DrawingBrush в сочетании с рисунком

GeometryDrawing

Для  демонстрации этой модели обобществления (рис. 5.18) определим  один геометрический примитив  и включим его в рисунок toShare; затем определим два объекта DrawingGroup, для каждого из которых toShare является потомком. Объ ект EllipseGeometry (и построенный на его основе объект GeometryDrawing) су ществует  в единственном экземпляре, но может  использоваться в двух разных контекстах,  где каждый  из объектов  DrawingGroup пользуется этим рисунком, применяя к нему преобразование TranslateTransform:

<!— Drawings.xaml —>

<Window x:Class=’EssentialWPF.Drawings’ xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’ xmlns:x=’http://schemas.microsoft.com/winfx/2006/xaml’ Title=’Drawings’

<Rectangle Name=’_rect’ />

</Window>

// Drawings.xaml.cs public Drawings() {

InitializeComponent();

GeometryDrawing toShare = new GeometryDrawing(Brushes.Red, null,

new EllipseGeometry(new Rect(2, 2, 15, 15))); DrawingGroup main = new DrawingGroup();

DrawingGroup a = new DrawingGroup();

a.Children.Add(toShare);

a.Transform = new TranslateTransform(8, 8);

DrawingGroup b = new DrawingGroup();

b.Children.Add(toShare);

b.Transform = new TranslateTransform(0, 0);

main.Children.Add(b);

main.Children.Add(a);

DrawingBrush brush = new DrawingBrush();

brush.Drawing = main;

brush.Viewport = new Rect(0, 0, 20, 20); brush.ViewportUnits = BrushMappingMode.Absolute; brush.TileMode = TileMode.Tile;

_rect.Fill = brush;

}

На  рис.  5.19 показано  созданное  для  этого  рисунка  изображение.  Рисунок toShare создается  только  один раз, что гарантирует очень эффективное рисова ние сложных объектов. Обобществление здесь гораздо глубже, чем просто раск

рытие объектной модели; поскольку рисунок не более, чем тонкая обертка вокруг ядра композиции, то обобществление производится внутри ядра.

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии