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

Шрифт:

-
+

Интервал:

-
+

Закладка:

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

<b>&lt;!-- Элемент Rectangle с трансформацией поворотом --&gt;</b>

&lt;Rectangle Height =&quot;100&quot; Width =&quot;40&quot; Fill =&quot;Red&quot;&gt;

  &lt;Rectangle.LayoutTransform&gt;

    &lt;RotateTransform Angle =&quot;45&quot;/&gt;

  &lt;/Rectangle.LayoutTransform&gt;

&lt;/Rectangle&gt;

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

<b>&lt;!-- Элемент Button с трансформацией скашиванием --&gt;</b>

&lt;Button Content =&quot;Click Me!&quot; Width=&quot;95&quot; Height=&quot;40&quot;&gt;

  &lt;Button.LayoutTransform&gt;

   &lt;SkewTransform AngleX =&quot;20&quot; AngleY =&quot;20&quot;/&gt;

  &lt;/Button.LayoutTransform&gt;

&lt;/Button&gt;

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

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

&lt;Ellipse Fill =&quot;Blue&quot; Width=&quot;5&quot; Height=&quot;5&quot;&gt;

  &lt;Ellipse.LayoutTransform&gt;

    &lt;ScaleTransform ScaleX =&quot;20&quot; ScaleY =&quot;20&quot;/&gt;

  &lt;/Ellipse.LayoutTransform&gt;

&lt;/Ellipse&gt;

<b>&lt;!-- Элемент TextBox, повернутый и скошенный --&gt;</b>

&lt;TextBox Text =&quot;Me Too!&quot; Width=&quot;50&quot; Height=&quot;40&quot;&gt;

  &lt;TextBox.LayoutTransform&gt;

    &lt;TransformGroup&gt;

      &lt;RotateTransform Angle =&quot;45&quot;/&gt;

      &lt;SkewTransform AngleX =&quot;5&quot; AngleY =&quot;20&quot;/&gt;

    &lt;/TransformGroup&gt;

  &lt;/TextBox.LayoutTransform&gt;

&lt;/TextBox&gt;

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

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

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

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

&lt;DockPanel LastChildFill=&quot;True&quot;&gt;

  &lt;DockPanel.LayoutTransform&gt;

    &lt;RotateTransform Angle=&quot;45&quot;/&gt;

  &lt;/DockPanel.LayoutTransform&gt;

  ...

&lt;/DockPanel&gt;

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

&lt;ToggleButton Name=&quot;flipCanvas&quot; Click=&quot;FlipCanvas_Click&quot;

    Content=&quot;Flip Canvas!&quot;/&gt;

Внутри обработчика события 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). Причина в том, что не был определен прямоугольник отсечения.

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

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