private void FlipCanvas_Click(object sender, RoutedEventArgs e)
{
if (flipCanvas.IsChecked == true)
{
RotateTransform rotate = new RotateTransform(-180);
canvasDrawingArea.LayoutTransform = rotate;
}
else
{
canvasDrawingArea.LayoutTransform = null;
}
}
Запустите приложение и добавьте несколько графических фигур в область Canvas
Canvas (рис. 26.9). Причина в том, что не был определен прямоугольник отсечения.Исправить проблему легко. Вместо того чтобы вручную писать сложную логику отсечения, просто установите свойство ClipToBounds
Canvas в 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:
Добавьте обработчики событий для кнопок:
private void Skew(object sender, RoutedEventArgs e)
{
}
private void Rotate(object sender, RoutedEventArgs e)
{
}
private void Flip(object sender, RoutedEventArgs e)
{
}
Чтобы завершить пользовательский интерфейс, создайте во второй колонке элемента Grid
Height="186" Width="92" Stroke="Black"
Canvas.Left="20" Canvas.Top="31">
Height="101" Width="110" Stroke="Black"
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT