Qiita Conference 2025

Qiita史上最多!豪華12名のゲストが登壇

特別講演ゲスト(敬称略)

ymrl、成瀬允宣、鹿野壮、伊藤淳一、uhyo、徳丸浩、ミノ駆動、みのるん、桜庭洋之、tenntenn、けんちょん、こにふぁー

3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 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

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?