Язык программирования C#9 и платформа .NET5
case SelectedShape.Circle:shapeToRender = new Ellipse() { Height = 35, Width = 35 };<b> // Создать кисть RadialGradientBrush в коде.</b>RadialGradientBrush brush = new RadialGradientBrush();brush.GradientStops.Add(new GradientStop((Color)ColorConverter.ConvertFromString("#FF77F177"), 0));brush.GradientStops.Add(new GradientStop((Color)ColorConverter.ConvertFromString("#FF11E611"), 1));brush.GradientStops.Add(new GradientStop((Color)ColorConverter.ConvertFromString("#FF5A8E5A"), 0.545));shapeToRender.Fill = brush;break;Кстати, объекты
можно строить, указывая простой цвет в качестве первого параметра конструктора с применением перечисленияGradientStop, которое дает сконфигурированный объектColors:ColorGradientStop g = new GradientStop(Colors.Aquamarine, 1);Если требуется более тонкий контроль, то можно передавать объект
, сконфигурированный в коде, например:ColorColor myColor = new Color() { R = 200, G = 100, B = 20, A = 40 };GradientStop g = new GradientStop(myColor, 34);Разумеется, использование перечисления
и классаColorsне ограничивается градиентными кистями. Их можно применять всякий раз, когда необходимо представить значение цвета в коде.ColorКонфигурирование перьев
В сравнении с кистями перо представляет собой объект для рисования границ геометрических объектов или в случае класса
либоLine— самого линейного геометрического объекта. В частности, классPolyLineпозволяет рисовать линию указанной толщины, представленной значением типа<div class="fb2-code"><code>Pen</code></div>. Вдобавок объектdoubleможет быть сконфигурирован с помощью того же самого вида свойств, что и в классеPen, таких как начальный и конечный концы пера, шаблоны точек-тире и т.д. Например, для определения атрибутов пера к определению фигуры можно добавить следующую разметку:Shape<Pen Thickness="10" LineJoin="Round" EndLineCap="Triangle"StartLineCap="Round" />Во многих случаях создавать объект
непосредственно не придется, потому что это делается косвенно, когда присваиваются значения свойствам вродеPenпроизводного отStrokeThicknessтипа (а также других типовShape). Однако строить специальный объектUIElementудобно при работе с типами, производными отPen(которые рассматриваются позже в главе). Среда Visual Studio не располагает редактором перьев как таковым, но позволяет для выбранного элемента конфигурировать все свойства, связанные со штрихами, с использованием окна Properties.DrawingПрименение графических трансформаций
В завершение обсуждения фигур будет рассмотрена тема трансформаций. Инфраструктура WPF поставляется с многочисленными классами, которые расширяют абстрактный базовый класс
. В табл. 26.5 кратко описаны основные классы, производные отSystem.Winodws.Media.Transform.TransformТрансформации могут применяться к любым объектам
(например, к объектам производных отUIElementклассов, а также к элементам управленияShape,Buttonи т.п.). Используя классы трансформаций, можно визуализировать графические данные под заданным углом, скашивать изображение на поверхности и растягивать, сжимать либо поворачивать целевой элемент разными способами.TextBoxНа заметку! Хотя объекты трансформаций могут применяться повсеместно, вы сочтете их наиболее удобными при работе с анимацией WPF и специальными шаблонами элементов управления. Как будет показано далее в главе, анимацию WPF можно использовать для включения в специальный элемент управления визуальных подсказок, предназначенных конечному пользователю.
Назначать целевому объекту (
,Buttonи т.д.) трансформацию (либо целый набор трансформаций) можно с помощью двух общих свойств,PathиLayoutTransform.RenderTransformСвойство
удобно тем, что трансформация происходит перед визуализацией элементов в диспетчере компоновки и потому не влияет на операции Z-упорядочивания (т.е. трансформируемые данные изображений не перекрываются).LayoutTransformС другой стороны, трансформация из свойства
инициируется после того, как элементы попали в свои контейнеры, поэтому вполне возможно, что элементы будут трансформированы с перекрытием друг друга в зависимости от того, как они организованы в контейнере.RenderTransformПервый взгляд на трансформации
Вскоре вы добавите к проекту
некоторую трансформирующую логику. Чтобы увидеть объект трансформации в действии, откройте редактор Kaxaml, определите внутри корневого элементаRenderingWithShapesилиPageпростой элементWindowи установите свойствоStackPanelвOrientation. Далее добавьте следующий элементHorizontal, который будет нарисован под углом в 45 градусов с применением объектаRectangle:RotateTransform

