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

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

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

177 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

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

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле. Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных. Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

    1 ... 337 338 339 340 341 342 343 344 345 ... 407
    Перейти на страницу:
    производными от Drawing (которые рассматриваются позже в главе). Среда Visual Studio не располагает редактором перьев как таковым, но позволяет для выбранного элемента конфигурировать все свойства, связанные со штрихами, с использованием окна Properties.

    Применение графических трансформаций

    В завершение обсуждения фигур будет рассмотрена тема трансформаций. Инфраструктура WPF поставляется с многочисленными классами, которые расширяют абстрактный базовый класс System.Winodws.Media.Transform. В табл. 26.5 кратко описаны основные классы, производные от Transform.

    Трансформации могут применяться к любым объектам UIElement (например, к объектам производных от Shape классов, а также к элементам управления Button, TextBox и т.п.). Используя классы трансформаций, можно визуализировать графические данные под заданным углом, скашивать изображение на поверхности и растягивать, сжимать либо поворачивать целевой элемент разными способами.

    На заметку! Хотя объекты трансформаций могут применяться повсеместно, вы сочтете их наиболее удобными при работе с анимацией WPF и специальными шаблонами элементов управления. Как будет показано далее в главе, анимацию WPF можно использовать для включения в специальный элемент управления визуальных подсказок, предназначенных конечному пользователю.

    Назначать целевому объекту (Button, Path и т.д.) трансформацию (либо целый набор трансформаций) можно с помощью двух общих свойств, LayoutTransform и RenderTransform.

    Свойство LayoutTransform удобно тем, что трансформация происходит перед визуализацией элементов в диспетчере компоновки и потому не влияет на операции Z-упорядочивания (т.е. трансформируемые данные изображений не перекрываются).

    С другой стороны, трансформация из свойства RenderTransform инициируется после того, как элементы попали в свои контейнеры, поэтому вполне возможно, что элементы будут трансформированы с перекрытием друг друга в зависимости от того, как они организованы в контейнере.

    Первый взгляд на трансформации

    Вскоре вы добавите к проекту RenderingWithShapes некоторую трансформирующую логику. Чтобы увидеть объект трансформации в действии, откройте редактор Kaxaml, определите внутри корневого элемента Page или Window простой элемент StackPanel и установите свойство Orientation в Horizontal. Далее добавьте следующий элемент Rectangle, который будет нарисован под углом в 45 градусов с применением объекта RotateTransform:

    <!-- Элемент Rectangle с трансформацией поворотом -->

    <Rectangle Height ="100" Width ="40" Fill ="Red">

      <Rectangle.LayoutTransform>

        <RotateTransform Angle ="45"/>

      </Rectangle.LayoutTransform>

    </Rectangle>

    Здесь элемент Button скашивается на поверхности на 20 градусов посредством трансформации SkewTransform:

    <!-- Элемент Button с трансформацией скашиванием -->

    <Button Content ="Click Me!" Width="95" Height="40">

      <Button.LayoutTransform>

       <SkewTransform AngleX ="20" AngleY ="20"/>

      </Button.LayoutTransform>

    </Button>

    Для полноты картины ниже приведен элемент Ellipse, масштабированный на 20% с помощью трансформации ScaleTransform (обратите внимание на значения, установленные в свойствах Height и Width), а также элемент TextBox, к которому применена группа объектов трансформации:

    <!-- Элемент Ellipse, масштабированный на 20% -->

    <Ellipse Fill ="Blue" Width="5" Height="5">

      <Ellipse.LayoutTransform>

        <ScaleTransform ScaleX ="20" ScaleY ="20"/>

      </Ellipse.LayoutTransform>

    </Ellipse>

    <!-- Элемент TextBox, повернутый и скошенный -->

    <TextBox Text ="Me Too!" Width="50" Height="40">

      <TextBox.LayoutTransform>

        <TransformGroup>

          <RotateTransform Angle ="45"/>

          <SkewTransform AngleX ="5" AngleY ="20"/>

        </TransformGroup>

      </TextBox.LayoutTransform>

    </TextBox>

    Следует отметить, что в случае применения трансформации выполнять какие-либо ручные вычисления для реагирования на проверку попадания, перемещение фокуса ввода и аналогичные действия не придется. Графический механизм WPF самостоятельно решает такие задачи. Например, на рис. 26.8 можно видеть, что элемент TextBox по-прежнему реагирует на клавиатурный ввод.

    Трансформация данных Canvas

    Теперь нужно внедрить в пример RenderingWithShapes логику трансформации. Помимо применения объектов трансформации к одиночному элементу (Rectangle, TextBox и т.д.) их можно также применять к диспетчеру компоновки, чтобы трансформировать все внутренние данные. Например, всю панель DockPanel главного окна можно было бы визуализировать под углом:

    <DockPanel LastChildFill="True">

      <DockPanel.LayoutTransform>

        <RotateTransform Angle="45"/>

      </DockPanel.LayoutTransform>

      ...

    </DockPanel>

    В рассматриваемом примере это несколько чрезмерно, так что добавьте последнюю (менее радикальную) возможность, которая позволит пользователю зеркально отобразить целый контейнер Canvas и всю содержащуюся в нем графику. Начните с добавления в ToolBar финального элемента ToggleButton со следующим определением:

    <ToggleButton Name="flipCanvas" Click="FlipCanvas_Click"

        Content="Flip Canvas!"/>

    Внутри обработчика события Click для нового элемента ToggleButton создайте объект RotateTransform и подключите его к объекту Canvas через свойство LayoutTransform, если элемент ToggleButton отмечен. Если же элемент ToggleButton не отмечен, тогда удалите трансформацию, установив свойство LayoutTransform в null.

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

    <Canvas ClipToBounds = "True" ... >

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

    Чтобы устранить проблему, примените тот же самый объект трансформации к рисуемой фигуре перед выполнением визуализации (через RenderTransform). Ниже показан основной фрагмент кода:

    private void CanvasDrawingArea_MouseLeftButtonDown(object sender,

                                                       MouseButtonEventArgs e)

    {

      // Для краткости код не показан.

     

    1 ... 337 338 339 340 341 342 343 344 345 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


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

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Лариса Лариса04 июнь 12:43 Да, просто до слез похоже на сериал ,,Даррел,,... Смерть в райском уголке - Эмили Салливан
    2. Stmara Stmara02 июнь 22:44 Приятная история, чтобы скоротать вечер. Любимая книга из последних "Любовь со смертью", также очень понравилась -"Суженная... Сердце космического дракона - Ольга Вадимовна Гусейнова
    3. Alex Alex01 июнь 17:12 💩💩💩🖕🖕🖕🖕🖕🖕🖕... Игровой момент II - Александр Андреевич Бодров
    Все комметарии
    Новинки бесплатной онлайн библиотеки