Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 525 526 527 528 529 530 531 532 533 ... 642
Перейти на страницу:

Исправить проблему легко. Вместо того чтобы вручную писать сложную логику отсечения, просто установите свойство ClipToBounds элемента Canvas в true, предотвратив визуализацию дочерних элементов вне границ родительского элемента. После запуска приложения можно заметить, что графические данные больше не покидают границы отведенной области.

&lt;Canvas ClipToBounds = &quot;True&quot; ... &gt;

Последняя крошечная модификация, которую понадобится внести, связана с тем фактом, что когда пользователь зеркально отображает холст, щелкая на кнопке переключения, а затем щелкает на нем для рисования новой фигуры, то точка, где был произведен щелчок, не является той позицией, куда попадут графические данные. Взамен они появятся в месте нахождения курсора мыши.

Чтобы устранить проблему, примените тот же самый объект трансформации к рисуемой фигуре перед выполнением визуализации (через 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})

&lt;Grid&gt;

  &lt;Grid.ColumnDefinitions&gt;

    &lt;ColumnDefinition Width=&quot;*&quot;/&gt;

    &lt;ColumnDefinition Width=&quot;*&quot;/&gt;

  &lt;/Grid.ColumnDefinitions&gt;

  &lt;StackPanel Grid.Row=&quot;0&quot; Grid.Column=&quot;0&quot;&gt;

    &lt;Button Name=&quot;btnSkew&quot; Content=&quot;Skew&quot; Click=&quot;Skew&quot;/&gt;

    &lt;Button Name=&quot;btnRotate&quot; Content=&quot;Rotate&quot; Click=&quot;Rotate&quot;/&gt;

    &lt;Button Name=&quot;btnFlip&quot; Content=&quot;Flip&quot; Click=&quot;Flip&quot;/&gt;

  &lt;/StackPanel&gt;

&lt;/Grid&gt;

Добавьте обработчики событий для кнопок:

private void Skew(object sender, RoutedEventArgs e)

{

}

private void Rotate(object sender, RoutedEventArgs e)

{

}

private void Flip(object sender, RoutedEventArgs e)

{

}

Чтобы завершить пользовательский интерфейс, создайте во второй колонке элемента Grid произвольную графику (используя любой прием, представленный ранее в главе). Вот разметка, применяемая в данном примере:

&lt;Canvas x:Name=&quot;myCanvas&quot; Grid.Column=&quot;1&quot; Grid.Row=&quot;0&quot;&gt;

  &lt;Ellipse HorizontalAlignment=&quot;Left&quot; VerticalAlignment=&quot;Top&quot;

       Height=&quot;186&quot;  Width=&quot;92&quot; Stroke=&quot;Black&quot;

       Canvas.Left=&quot;20&quot; Canvas.Top=&quot;31&quot;&gt;

    &lt;Ellipse.Fill&gt;

      &lt;RadialGradientBrush&gt;

        &lt;GradientStop Color=&quot;#FF951ED8&quot; Offset=&quot;0.215&quot;/&gt;

        &lt;GradientStop Color=&quot;#FF2FECB0&quot; Offset=&quot;1&quot;/&gt;

      &lt;/RadialGradientBrush&gt;

1 ... 525 526 527 528 529 530 531 532 533 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга