WPF System Object Dispatcher Object Dependency Object Drawing
Классы двумерной графики WPF System. Object Dispatcher. Object Dependency. Object Drawing. Context Visual Freezable UIElement Framework. Element Shape Image Animatable Brush Pen Gradient. Brush Geometry Image. Source Path. Segment Path. Figure Drawing Combined. Geometry Drawing. Image Drawing. Group Bitmap. Source Image. Drawing Ellipse Line. Gradient. Brush Ellipse. Geometry Line Radial. Gradient. Brush Geometry. Group Bitmap. Frame Arc. Segment Geometry. Drawing … Path Solid. Color. Brush Line. Geometry Bitmap. Image Bezier. Segment Polygon Tile. Brush Path. Geometry Cropped. Bitmap Line. Segment … Polyline Drawing. Brush Rectangle. Geometry Rectangle Image. Brush Stream. Geometry Container. Visual Drawing. Visual. Brush Poly. Bezier. Segment Poly. Line. Segment Poly. Quadratic. Bezier. Segment
System. Windows. Shapes. Line ü Элемент управления, представляющий собой отрезок прямой, соединяющий две точки. ü Свойства класса Line, которые задают отрезок прямой. Координаты задаются относительно левого верхнего угла контейнера размещения без полей. public double X 1 { get; set; } public double Y 1 { get; set; } public double X 2 { get; set; } public double Y 2 { get; set; } ü Пример определения в разметке <Grid. Column="1" Background="White. Smoke"> <Line Name="line_right" Margin ="10, 10, 10“ X 1="0" Y 1="0" X 2="100" Y 2="100" Stroke="Slate. Blue" Stroke. Thickness="2"> </Line> </Grid> ü Пример в коде C#. public partial class Page_Lines : Page { Line line_left = new Line(); private void Page_Loaded(object sender, Routed. Event. Args e) { line_left. X 1 = 10; line_left. Y 1 = 10; line_left. X 2 = 100; line_left. Y 2 = 150; line_left. Stroke = new Solid. Color. Brush(Colors. Red); line_left. Stroke. Thickness = 1; } if (grid 1. Children. Contains(line_left) == false) grid 1. Children. Add(line_left); …………
System. Windows. Shapes. Polyline ü Элемент управления, представляющий собой линию, состоящую из отрезков прямой. ü Класс содержит коллекцию, состоящую из вершин Polyline. public Point. Collection Points { get; set; } ü Коллекция Point. Collection [Type. Converter. Attribute(typeof(Point. Collection. Converter))] public sealed class Point. Collection : Freezable, IFormattable, IList, ICollection, IList<Point>, ICollection<Point>, IEnumerable ü При объявлении коллекции Point. Collection в разметке можно использовать обычный синтаксис для коллекций или задать в виде строки, в которой координаты вершин разделены одной запятой и (или) одним или несколькими пробелами. ü Пример объявления в разметке < Grid. Column="1" Background="White. Smoke"> <Polyline Name="polyline_1" Margin ="10, 10, 10" Points="10, 50, 100, 150, 10, 200, 150, 250, 0" Stroke="Slate. Blue" Stroke. Thickness="1"></Polyline> <Polyline Name="polyline_2" Margin ="10, 10, 10" Points="10, 30 50, 120 100, 120 150, 30 200, 170 250, 20" Stroke="Red" Stroke. Thickness="1"></Polyline> </Grid>
Классы Path, Geometry и Path. Geometry ü Класс Path. Geometry представляет фигуру, которая может состоять из дуг, кривых, эллипсов, линий и прямоугольников. System. Object Dispatcher. Object Dependency. Object ü Каждый объект Path. Geometry содержит коллекцию объектов Path. Figure, доступную через свойство Figures: Freezable Animatable public Path. Figure. Collection Figures { get; set; } Geometry Path. Segment Path. Figure Combined. Geometry Arc. Segment Ellipse. Geometry Bezier. Segment Geometry. Group Line. Segment Line. Geometry Poly. Line. Segment Path. Geometry Poly. Bezier. Segment Rectangle. Geometry Stream. Geometry Quadratic. Bezier. Segment Poly. Quadratic. Bezier. Segment ü Каждый объект Path. Figure содержит коллекцию объектов Path. Segment, (Arc. Segment, Bezier. Segment , …), доступную через свойство Segments: public Path. Segment. Collection Segments { get; set; } üОбъект Path. Geometry можно отобразить с помощью элемента Path: üВ классе Path есть свойство public Geometry Data { get; set; }
Класс Transform System. Object Dispatcher. Object ü Transform – абстрактный базовый класс для преобразований в двухмерной плоскости. Translate. Transform Перенос. Rotate. Transform Поворот. Scale. Transform Масштабирование. Skew. Transform Отклонение. Matrix. Transform Пользовательские преобразования. Transform. Group Объединение нескольких объектов Transform в составной объект. Dependency. Object Freezable Animatable General. Transform Matrix. Transform Rotate. Transform Scale. Transform Skew. Transform. Group Translate. Transform General. Transform. Group ü В производных от Transform классах определены свойства, с помощью которых можно задать параметры конкретных преобразований. ü В классе Transform. Group определена коллекция объектов Transform public Transform. Collection Children { get; set; }
Класс Drawing. Context. Пример ü В примере получена ссылка на Drawing. Context для объекта Drawing. Visual и в объект Drawing. Context добавлен эллипс Drawing. Visual visual = new Drawing. Visual(); Drawing. Context dc = visual. Render. Open(); Pen pen = new Pen(Brushes. Red, 2); dc. Draw. Ellipse(Brushes. Gainsboro, pen, clicked. Point, 40, 20); dc. Close(); ü Чтобы вывести объект Drawing. Visual его надо добавить в визуальное дерево некоторого элемента. В примере объект добавлен в элемент canvas типа Canvas. canvas. Add. Visual. Child(visual);
Класс Drawing. Context. Пример. Продолжение class Drawing. Canvas : Canvas { private List<Visual> visuals = new List<Visual>(); protected override int Visual. Children. Count { get { return visuals. Count; } } protected override Visual Get. Visual. Child(int index) { return visuals[index]; } public void Add. Visual(Visual visual) { visuals. Add(visual); base. Add. Visual. Child(visual); base. Add. Logical. Child(visual); } public void Remove. Visual(Visual visual) { visuals. Remove(visual); base. Remove. Visual. Child(visual); base. Remove. Logical. Child(visual); } public Drawing. Visual Get. Visual(Point point) { Hit. Test. Result res = Visual. Tree. Helper. Hit. Test(this, point); return res. Visual. Hit as Drawing. Visual; } }
- Slides: 21