KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
Перейти на страницу:

<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
по-прежнему реагирует на клавиатурный ввод.

Язык программирования C#9 и платформа .NET5 - _234.png

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

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*