Практическое занятие № 9
Пользовательские элементы в WPF-приложениях. Классы Path и Geometry.
PathGeometry позволяет создавать более сложные по характеру геометрии. PathGeometry содержит один или несколько компонентов PathFigure. Объект PathFigure в свою очередь формируется из сегментов. Все сегменты наследуются от класса PathSegment и бывают нескольких видов:
-
LineSegment задает отрезок прямой линии между двумя точками
-
ArcSegment задает дугу
-
BezierSegment задает кривую Безье
-
QuadraticBezierSegment задает квадратичную кривую Безье
-
PolyLineSegment задает сегмент из нескольких линий
-
PolyBezierSegment задает сегмент из нескольких кривых Безье
-
PolyQuadraticBezierSegment задает сегмент из нескольких квадратичных кривых Безье
Эти сегменты составляют свойство Segment объекта PathFigure. Кроме того, PathFigure имеет еще несколько важных свойств:
-
StartPoint - точка начала первой фигуры
-
IsClosed - если значение равно true, то первая и последняя точки (если они не совпадают) соединяются
-
IsFilled - если значение равно true, то площадь внутри пути окрашивается кистью, заданной свойством Fill у объекта Path
Линии
Создание линий с помощью PathGeometry:
Управляя свойством IsClosed мы можем получить как замкнутый, так и незамкнутый контур. А при применении свойства Fill в элементе Path содержимое контура заполняется цветом. Таким образом, мы можем получить не просто линию, а целостные фигуры, заполненные цветом.
Дуга
Для создания дуги у ArcSegment задается свойство Point, которое указывает на конечную точку дуги (начальная точка задается через свойство StartPoint элемента PathFigure), а свойство Size устанавливает размер окружностей, по которым строится дуга.
Кривые Безье
Кривые Безье представляют линии, для построения которых применяются сложные математические преобразования. В WPF кривые Безье представлены различными типами: простые и квадратичные кривые. Для построения кривых Безье используются начальная и конечная точки, а также ряд промежуточных точек:
Начальная точка кривых устанавливается с помощью свойства StartPoint элемента PathFigure. Для простой кривой Безье свойства Point1 и Point2 задают промежуточные точки, а Point3 является конечной точкой. Для квадратичной кривой Point2 - конечная точка, а Point1 - промежуточная.
Трансформации представляют инструмент изменения положения или размера элементов WPF. Трансформации могут быть полезны в тех ситуациях, когда надо изменить положение элемента, либо анимировать. Все трансформации наследуются от абстрактного базового класса System.Windows.Media.Transform и представляют следующие классы:
-
TranslateTransform: сдвигает элементы по горизонтали и вертикали
-
RotateTransform: вращает элемент
-
ScaleTransform: выполняет операции масштабирования
-
SkewTransform: изменяет позицию элемента путем наклона на определенное количество градусов
-
MatrixTransform: изменяет координатную систему в соответствии с определенной матрицей
-
TransformGroup: представляет группу трансформаций
RotateTransform
RotateTransform поворачивает элемент вокруг оси на определенное количество градусов. Данный объект принимает три основых параметра:
TranslateTransform
TranslateTransform позволяет сместить положение элемента по оси X, с помощью свойства X, и по оси Y - с помощью свойства Y.
ScaleTransform
Обеспечивает масштабирование элемента на определенную величину. Для изменения ширины надо задать свойство ScaleX, а для изменения длины - свойство ScaleY. Кроме того, также имеются свойства CenterX и CenterY, позволяющие позиционировать элемент.
Например, увеличение прямоугольника в полтора раза:
SkewTransform
SkewTransform позволяет задать наклон элемента вдоль оси X с помощью свойства AngleX, и по оси Y - с помощью свойства AngleY. А с помощью свойств CenterX и CenterY можно изменить положение элемента относительно осй X и Y:
MatrixTransform
Осуществляет матричное преобразование элемента. В свойстве Matrix мы задаем первые два столбца, которые применяются при преобразовании. Последний столбец по умолчанию имеет значения {0 0 1}.
RenderTransform и LayoutTransform
Для применения трансформаций у фигур и стандартных элементов управления WPF используются свойства RenderTransform и LayoutTransform. Несмотря на то, что для обоих свойств трансформации задаются одинаково, их действие различается. Так, свойство LayoutTransform применяется до компоновки элемента, а RenderTransform - после, поэтому одинаковые трансформации для этих свойств могут давать немного разные результаты: