正向你已懂得的那样 在WPF或silverlight中物件儿(这里指的是UIElement 的子孙们)是可以通过矩阵变换的 转 ,移,缩小等等。 同时微软也提供了方法然你直接地变换。RotateTransform 就是通过角度的变转动物件儿。ScaleTransform 是缩放物件儿。太多的描述可以去看 微软的说明。这里写了一段代码 共想了解它的朋友使用。
/// <summary> /// 一个旋转加缩小的例子 in code C# /// 当然你也可以直接转矩阵 /// </summary> /// <param name="par"> 是一个比较高层物件 它具有RenderTransform /// 和RenderSize。 就是说这个方法可以被UIElement的子孙们使用, 比如 image button。 /// 这个方法就是把一个物件转并且缩小 /// </param> private void Exe_image_route(UIElement par) { //每一次要转的角度 var angle = 90; //g_t 的根儿 也是矩阵它可以让你吧不同的变换累加在一起 比如 转 ,移动。。 //所以他有一群儿子 ,这里简称 组变换 TransformGroup g_t ; //rt 只做 转的变换 RotateTransform rt ; //st 只做 缩小的变换 ScaleTransform st ; //看看有没有已设定的组变换 g_t = (TransformGroup)par.GetValue(UIElement.RenderTransformProperty); if (g_t != null) { //如果有,把他们都取出来 rt = (RotateTransform)g_t. Children.FirstOrDefault (p => p.GetType() == typeof(RotateTransform)); st = (ScaleTransform)g_t. Children.FirstOrDefault (p => p.GetType() == typeof(ScaleTransform)); if (rt == null || st == null) { //如果不全就让他们都设为起点 rt = new RotateTransform(); st = new ScaleTransform(); } } else { //连组变换都没有 大家都是第一次 都设为初始值。 g_t = new TransformGroup(); rt = new RotateTransform (); st = new ScaleTransform (); } //转一个角度 是加一个角度 rt.Angle = rt.Angle + angle; //设旋转中心 rt.CenterX = par.RenderSize.Width /2; rt.CenterY = par.RenderSize.Height /2; //设缩小中心 st.CenterX = par.RenderSize.Width /2; st.CenterY = par.RenderSize.Height /2; //这里给一个固定缩小值 你可以根据需要改 st.ScaleX = 0.7; st.ScaleY = 0.7; //不要忘了 每回都是新的啊 g_t = new TransformGroup(); //把儿子加进去。 你当然还可以加别的变换 比如移动。有顺序问题哦 g_t.Children.Add(rt); g_t.Children.Add(st); //让这物件 按你的变换组玩。 par.RenderTransform=g_t; }