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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 525 526 527 528 529 530 531 532 533 ... 642

Исправить проблему легко. Вместо того чтобы вручную писать сложную логику отсечения, просто установите свойство 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, кистей и трансформаций завершено. Прежде чем перейти к анализу роли визуализации графики с использованием рисунков и геометрических объектов, имеет смысл выяснить, каким образом IDE-среда Visual Studio способна упростить работу с примитивными графическими элементами.

Работа с редактором трансформаций Visual Studio

В предыдущем примере разнообразные трансформации применялись за счет ручного ввода разметки и написания кода С#. Наряду с тем, что поступать так вполне удобно, последняя версия Visual Studio поставляется со встроенным редактором трансформаций. Вспомните, что получателем служб трансформаций может быть любой элемент пользовательского интерфейса, в том числе диспетчер компоновки, содержащий различные элементы управления. Для демонстрации работы с редактором трансформаций Visual Studio будет создан новый проект приложения WPF по имени FunWithTransforms.

Построение начальной компоновки

Первым делом разделите первоначальный элемент Grid на две колонки с применением встроенного редактора сетки (точные размеры колонок роли не играют). Далее отыщите в панели инструментов элемент управления StackPanel и добавьте его так, чтобы он занял все пространство первой колонки Grid; затем добавьте в панель StackPanel три элемента управления Button:

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

<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>

1 ... 525 526 527 528 529 530 531 532 533 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий