LoginSignup
3
7

More than 3 years have passed since last update.

[WPF/xaml/C#]コントロールの大きさや位置を、C#コードから変化させる(RenderTransform)

Last updated at Posted at 2019-06-06

やりたいこと

xaml側で、コントロールのRenderTransformに、Transformを継承したクラス(例えばRotateTransform(回転)ScaleTransform(拡大縮小)TranslateTransform(移動)など)をセットしてパラメータを設定してやると、そのコントロールを回転、拡大縮小、移動などできるが、それをコードから行いたい。

やり方

xamlでやるのと同じように、コントロールのRenderTransformTransform系クラスをセットする。
セットするときには、TransformGroupの子要素としてTransform系クラスを登録してから、そのTransformGroupRenderTransformに入れるようにする。(ややこしいので下記サンプル参照)

サンプルコード

ここでは、ボタンを押したときに、そのボタン自身を3倍の大きさにして、横に10ピクセルほどずらすということをしている。

MainWindow.xaml
<Window x:Class="WpfApp28.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:WpfApp28"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Width="100" Height="50" Content="ボタン" Click="Button_Click"/>
    </Grid>
</Window>

MainWindow.xaml.cs
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace WpfApp28
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (sender is Button bt)
            {
                // TransformGroupを作成(大きさを3倍にして、右に10pixcelずらす)
                var tfg = new TransformGroup();
                tfg.Children.Add(new ScaleTransform(3, 3));
                tfg.Children.Add(new TranslateTransform(10, 0));

                // ボタンのRenderTransformにセット
                bt.RenderTransform = tfg;
            }
        }
    }
}

その他、TransformGroupにsetできるもの

msdocsのTransform Classのページによると、この辺りをsetできる。

クラス 機能
RotateTransform 回転
ScaleTransform 拡大縮小
TranslateTransform 平行移動
SkewTransform スキュー変換(難しそうなので未検証)
MatrixTransform アフィン行列変換(難しそうなので未検証)

関連記事

xamlだけで同じことがしたいときはこちら
[WPF/xaml] 画面の要素を回転/拡大縮小/移動する(RenderTransform)

参考

アニメーション(WPF)
https://ufcpp.net/study/dotnet/wpf_xamlani.html

3
7
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
3
7