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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值