6
9

More than 3 years have passed since last update.

[WPF/xaml] 画面の要素を回転/拡大縮小/移動する(RenderTransform)

Last updated at Posted at 2019-07-25

もくじ
https://qiita.com/tera1707/items/4fda73d86eded283ec4f

回転/拡大縮小/移動の関連記事

やりたいこと

xamlで画面に配置したものを、移動したり、拡大縮小、回転させたい。

やり方

描くUI要素のRenderTransformに、Transformクラスを継承したRotateTransformScaleTransformTranslateTransformなどをセットして実現する。

サンプルコード

処理前

まず、元となる画面はこれを使う。

元.xaml
<Window x:Class="WpfApp35.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp35"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="300">
    <Grid ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition /><RowDefinition /><RowDefinition />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition /><ColumnDefinition /><ColumnDefinition />
        </Grid.ColumnDefinitions>

        <!-- 四角を配置 -->
        <Rectangle Grid.Column="1" Grid.Row="1" Fill="LightSeaGreen" Stroke="Beige">
        </Rectangle>
    </Grid>
</Window>

image.png

回転を加える

RenderTransformRotateTransformをセットし、45度回転させる。

45度回転.xaml
<Rectangle Grid.Column="1" Grid.Row="1" Fill="LightSeaGreen" Stroke="Beige" RenderTransformOrigin="0.5,0.5">
    <Rectangle.RenderTransform>
        <RotateTransform Angle="45"/>
    </Rectangle.RenderTransform>
</Rectangle>

image.png

※注意
RenderTransformOriginに0.5,0.5をセットすると、図のように四角の真ん中を中心として回転する。なにもセットしないと、四角の左上を中心にして回転する。

image.png

拡大縮小する

RenderTransformScaleTransformをセットし、1/2に縮小する。

拡大縮小.xaml
<Rectangle Grid.Column="1" Grid.Row="1" Fill="LightSeaGreen" Stroke="Beige" RenderTransformOrigin="0.5,0.5">
    <Rectangle.RenderTransform>
        <ScaleTransform ScaleX="0.5" ScaleY="0.5"/>
    </Rectangle.RenderTransform>
</Rectangle>

image.png

※注意
RenderTransformOriginに0.5,0.5をセットすると、図のように四角の真ん中を中心として縮小する。なにもセットしないと、四角の左上を中心にして縮小する。
image.png

移動する

RenderTransformTranslateTransformをセットし、右に10、下に10移動する。

平行移動.xaml
<Rectangle Grid.Column="1" Grid.Row="1" Fill="LightSeaGreen" Stroke="Beige">
    <Rectangle.RenderTransform>
        <TranslateTransform X="10" Y="10" />
    </Rectangle.RenderTransform>
</Rectangle>

image.png

複数の変換をさせたいとき

RenderTransformTransformGroupをセットし、さらにそこに上の〇〇〇Transformをセットする。

複合.xaml
<Rectangle Grid.Column="1" Grid.Row="1" Fill="LightSeaGreen" Stroke="Beige">
    <Rectangle.RenderTransform>
        <TransformGroup>
            <RotateTransform Angle="45"/>
            <ScaleTransform ScaleX="0.5" ScaleY="0.5"/>
            <TranslateTransform X="10" Y="10" />
        </TransformGroup>
    </Rectangle.RenderTransform>
</Rectangle>

image.png

※注意
TransformGroupにセットする〇〇〇Transformの順番により、結果が変わるので注意。

複合2.xaml
<Rectangle Grid.Column="1" Grid.Row="1" Fill="LightSeaGreen" Stroke="Beige">
    <Rectangle.RenderTransform>
        <TransformGroup>
            <ScaleTransform ScaleX="0.5" ScaleY="0.5"/>
            <TranslateTransform X="10" Y="10" />
            <RotateTransform Angle="45"/>
        </TransformGroup>
    </Rectangle.RenderTransform>
</Rectangle>

image.png

関連記事

C#のコードから同じことをしたいときはこちら。
[WPF/xaml/C#]コントロールの大きさや位置を、C#コードから変化させる(RenderTransform)

コード

参考

Transform Class
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.media.transform?view=netframework-4.8

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9