您的位置:首页 > 编程语言 > C#

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

2014-11-06 20:38 330 查看
正向你已懂得的那样 在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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐