silverlight 中 物件儿的位置变换 TransformGroup,RotateTransform 和 ScaleTransform 用C#

来源:互联网 发布:网络四大杀手 编辑:程序博客网 时间:2024/05/06 00:25

正向你已懂得的那样   在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;                  }


0 0
原创粉丝点击