[WPF/xaml/C#]コントロールの大きさや位置を、C#コードから変化させる(RenderTransform)
やりたいこと
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
Author And Source
この問題について([WPF/xaml/C#]コントロールの大きさや位置を、C#コードから変化させる(RenderTransform)), 我々は、より多くの情報をここで見つけました https://qiita.com/tera1707/items/252fe9f7b88cded31e89著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .