やりたいこと
xaml側で、コントロールのRenderTransform
に、Transform
を継承したクラス(例えばRotateTransform(回転)``ScaleTransform(拡大縮小)``TranslateTransform(移動)
など)をセットしてパラメータを設定してやると、そのコントロールを回転、拡大縮小、移動などできるが、それをコードから行いたい。
やり方
xamlでやるのと同じように、コントロールのRenderTransform
にTransform
系クラスをセットする。
セットするときには、TransformGroup
の子要素としてTransform
系クラスを登録してから、そのTransformGroup
をRenderTransform
に入れるようにする。(ややこしいので下記サンプル参照)
サンプルコード
ここでは、ボタンを押したときに、そのボタン自身を3倍の大きさにして、横に10ピクセルほどずらすということをしている。
<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>
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