2D图形的变化(Transform)
我们来讲一下2D图形的变化。也就是关于RenderTransform这个属性。
我们向元素变换的时候,有两种应用变换。
-
如果您不希望变换影响布局,请使用该元素的 RenderTransform 属性。
-
如果您希望变换影响布局,请使用该元素的 LayoutTransform 属性。
下面来讲RenderTransform属性。
- RotateTransform属性,Angle表示旋转的角度。CenterX,CenterY表示旋转中心点的位置。
- ScaleTransform属性,用来放大或放小元素的。它也有CenterX,CenterY.还有ScaleX,ScaleY。表示要放大的倍数。
- SkewTransform属性,表示扭曲元素。AngleX和AngleY表示向X或Y方向扭曲多少度。它也有CenterX,CenterY。
- TranslateTransform属性,表示平移。有X和Y表示向X或Y方向平移多少距离。
下面我们用后台代码来写。
private void button1_Click(object sender, RoutedEventArgs e)
{
TransformGroup tg=new TransformGroup();
ScaleTransform sf=new ScaleTransform();
sf.ScaleX = 2;
RotateTransform rt=new RotateTransform();
rt.Angle = 45;
tg.Children.Add(sf);
tg.Children.Add(rt);
rectangle1.RenderTransform = tg;
}
当我们按下Button时,rectangle1的形状会变成X方向放大2倍,并且以CenterX=”0”和CenterY=”0”以中心点旋转45度。
变化前:
变化后:
如果我们要实现旋转的动画呢?
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
private void button1_Click(object sender, RoutedEventArgs e)
{
t.Interval = 100;
t.Tick += new EventHandler(t_Tick);
t.Enabled = true;
}
double scale = 1;
double angle = 0;
void t_Tick(object sender, EventArgs e)
{
TransformGroup tg = new TransformGroup();
ScaleTransform sf = new ScaleTransform(scale, scale);
scale += .5;
RotateTransform rt = new RotateTransform(angle);
angle += 10;
tg.Children.Add(sf);
tg.Children.Add(rt);
rectangle1.RenderTransform = tg;
}
}
这里我们用Timer控件来实现。这里的Timer要用这个引用
using System.Windows.Forms;