Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
</Ellipse.Fill>
</Ellipse>
<Ellipse HorizontalAlignment="Left" VerticalAlignment="Top"
Height="101" Width="110" Stroke="Black"
Canvas.Left="122" Canvas.Top="126">
<Ellipse.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFB91DDC" Offset="0.355"/>
<GradientStop Color="#FFB0381D" Offset="1"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
</Canvas>
Окончательная компоновка показана на рис. 26.10.

Применение трансформаций на этапе проектирования
Как упоминалось ранее, IDE-среда Visual Studio предоставляет встроенный редактор трансформаций, который можно найти в окне Properties. Раскройте раздел Transform (Трансформация), чтобы отобразить области RenderTransform и LayoutTransform редактора (рис. 26.11).

Подобно разделу Brush раздел Transform предлагает несколько вкладок, предназначенных для конфигурирования разнообразных типов графической трансформации текущего выбранного элемента. В табл. 26.6 описаны варианты трансформации, доступные на этих вкладках (в порядке слева направо).

Испытайте каждую из описанных трансформаций,используя в качестве цели специальную фигуру (для отмены выполненной операции просто нажимайте <Ctrl+Z>). Как и многие другие аспекты раздела Transform окна Properties, каждая трансформация имеет уникальный набор параметров конфигурации, которые должны стать вполне понятными, как только вы просмотрите их. Например, редактор трансформации Skew позволяет устанавливать значения скоса х и у, а редактор трансформации Flip дает возможность зеркально отображать относительно оси х или у и т.д.
Трансформация холста в коде
Реализации обработчиков для всех кнопок будут более или менее похожими. Мы сконфигурируем объект трансформации и присвоим его объекту
myCanvas
LayoutTransform
private void Flip(object sender, System.Windows.RoutedEventArgs e)
{
myCanvas.LayoutTransform = new ScaleTransform(-1, 1);
}
private void Rotate(object sender, System.Windows.RoutedEventArgs e)
{
myCanvas.LayoutTransform = new RotateTransform(180);
}
private void Skew(object sender, System.Windows.RoutedEventArgs e)
{
myCanvas.LayoutTransform = new SkewTransform(40, -20);
}
Визуализация графических данных с использованием рисунков и геометрических объектов
Несмотря на то что типы
Shape
Path
Входной точкой в этот API-интерфейс является абстрактный класс
System.Windows.Media.Drawing
PresentationCore.dll
Инфраструктура WPF предлагает разнообразные классы, расширяющие
Drawing

Будучи более легковесными, производные от
Drawing
UIElement
FrameworkElement
Другое ключевое отличие между типами, производными от
Drawing
Shape
Drawing
UIElement
DrawingImage
DrawingBrush
DrawingVisual
Класс
DrawingImage
DrawingBrush
DrawingVisual
Хотя работать с рисунками немного сложнее, чем с простыми фигурами, отделение графической композиции от графической визуализации делает типы, производные от
Drawing
Shape