Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<b><!-- Элемент Rectangle с трансформацией поворотом --></b><Rectangle Height ="100" Width ="40" Fill ="Red"> <Rectangle.LayoutTransform> <RotateTransform Angle ="45"/> </Rectangle.LayoutTransform></Rectangle>Здесь элемент
ButtonSkewTransform<b><!-- Элемент Button с трансформацией скашиванием --></b><Button Content ="Click Me!" Width="95" Height="40"> <Button.LayoutTransform> <SkewTransform AngleX ="20" AngleY ="20"/> </Button.LayoutTransform></Button>Для полноты картины ниже приведен элемент
EllipseScaleTransformHeightWidthTextBox<b><!-- Элемент Ellipse, масштабированный на 20% --></b><Ellipse Fill ="Blue" Width="5" Height="5"> <Ellipse.LayoutTransform> <ScaleTransform ScaleX ="20" ScaleY ="20"/> </Ellipse.LayoutTransform></Ellipse><b><!-- Элемент TextBox, повернутый и скошенный --></b><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
Теперь нужно внедрить в пример
RenderingWithShapesRectangleTextBoxDockPanel<DockPanel LastChildFill="True"> <DockPanel.LayoutTransform> <RotateTransform Angle="45"/> </DockPanel.LayoutTransform> ...</DockPanel>В рассматриваемом примере это несколько чрезмерно, так что добавьте последнюю (менее радикальную) возможность, которая позволит пользователю зеркально отобразить целый контейнер
CanvasToolBarToggleButton<ToggleButton Name="flipCanvas" Click="FlipCanvas_Click" Content="Flip Canvas!"/>Внутри обработчика события
ClickToggleButtonRotateTransformCanvasLayoutTransformToggleButtonToggleButtonLayoutTransformnullprivate void FlipCanvas_Click(object sender, RoutedEventArgs e){ if (flipCanvas.IsChecked == true) { RotateTransform rotate = new RotateTransform(-180); canvasDrawingArea.LayoutTransform = rotate; } else { canvasDrawingArea.LayoutTransform = null; }}Запустите приложение и добавьте несколько графических фигур в область
CanvasCanvas