Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Исправить проблему легко. Вместо того чтобы вручную писать сложную логику отсечения, просто установите свойство
ClipToBounds
Canvas
true
<Canvas ClipToBounds = "True" ... >
Последняя крошечная модификация, которую понадобится внести, связана с тем фактом, что когда пользователь зеркально отображает холст, щелкая на кнопке переключения, а затем щелкает на нем для рисования новой фигуры, то точка, где был произведен щелчок, не является той позицией, куда попадут графические данные. Взамен они появятся в месте нахождения курсора мыши.
Чтобы устранить проблему, примените тот же самый объект трансформации к рисуемой фигуре перед выполнением визуализации (через
RenderTransform
private void CanvasDrawingArea_MouseLeftButtonDown(object sender,
MouseButtonEventArgs e)
{
// Для краткости код не показан.
if (flipCanvas.IsChecked == true)
{
RotateTransform rotate = new RotateTransform(-180);
shapeToRender.RenderTransform = rotate;
}
// Установить левую верхнюю точку для рисования на холсте.
Canvas.SetLeft(shapeToRender, e.GetPosition(canvasDrawingArea).X);
Canvas.SetTop(shapeToRender, e.GetPosition(canvasDrawingArea).Y);
// Нарисовать фигуру.
canvasDrawingArea.Children.Add(shapeToRender);
}
На этом исследование пространства имен
System.Windows.Shapes
Работа с редактором трансформаций Visual Studio
В предыдущем примере разнообразные трансформации применялись за счет ручного ввода разметки и написания кода С#. Наряду с тем, что поступать так вполне удобно, последняя версия Visual Studio поставляется со встроенным редактором трансформаций. Вспомните, что получателем служб трансформаций может быть любой элемент пользовательского интерфейса, в том числе диспетчер компоновки, содержащий различные элементы управления. Для демонстрации работы с редактором трансформаций Visual Studio будет создан новый проект приложения WPF по имени
FunWithTransforms
Построение начальной компоновки
Первым делом разделите первоначальный элемент
Grid
StackPanel
Grid
StackPanel
Button
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0">
<Button Name="btnSkew" Content="Skew" Click="Skew"/>
<Button Name="btnRotate" Content="Rotate" Click="Rotate"/>
<Button Name="btnFlip" Content="Flip" Click="Flip"/>
</StackPanel>
</Grid>
Добавьте обработчики событий для кнопок:
private void Skew(object sender, RoutedEventArgs e)
{
}
private void Rotate(object sender, RoutedEventArgs e)
{
}
private void Flip(object sender, RoutedEventArgs e)
{
}
Чтобы завершить пользовательский интерфейс, создайте во второй колонке элемента
Grid
<Canvas x:Name="myCanvas" Grid.Column="1" Grid.Row="0">
<Ellipse HorizontalAlignment="Left" VerticalAlignment="Top"
Height="186" Width="92" Stroke="Black"
Canvas.Left="20" Canvas.Top="31">
<Ellipse.Fill>
<RadialGradientBrush>
<GradientStop Color="#FF951ED8" Offset="0.215"/>
<GradientStop Color="#FF2FECB0" Offset="1"/>
</RadialGradientBrush>