WPF快速指导14:变换

简介:
WPF快速指导14:变换

变换,也叫变形(transform)。它定义了从一个坐标空间到另一个坐标空间的映射。变换通过矩阵来描述。变换包括旋转、伸缩、倾斜、调动,这些行为都是矩阵变换。用户还可以实现自己的矩阵。
各种变换通过RenderTransform属性来应用。RenderTransform是UIElement的一个公共属性,它的类型是Transform。类型Transform是一个抽象类。所以,要为元素的设置变化,就意味着要为元素的RenderTransform属性设置一个Transform的子类的一个实例对象。这话听上去有些拗口,但是下面的示例可以让大家明确这一点。

1:变换之RotateTransform
RotateTransform 就是抽象类Transform的一个子类,它负责在二维 x-y 坐标系内围绕指定点顺时针旋转对象。如,对一个rectangle转换角度45‘,前台代码如下:
 
   
< Rectangle x:Name ="Rect1" Width ="200" Height ="100" Stroke ="Black" StrokeThickness ="5" RadiusX ="50" RadiusY ="5" >
< Rectangle.RenderTransform >
< RotateTransform Angle ="45" ></ RotateTransform >
</ Rectangle.RenderTransform >
</ Rectangle >

如果要使用后台代码,则如下:

前:  

 
   
< Rectangle x:Name ="Rect2" Width ="200" Height ="100" Stroke ="Black" >
</ Rectangle >

后台:

 
   
Rect2.RenderTransform = new RotateTransform() { Angle = 30 };

默认的旋转点是矩形的左上角。为了更改旋转点,可以设置CenterX和CenterY。两个矩形的最终样式如下:

2011042715483883.png

2:变换之ScaleTransform

ScaleTransform也是抽象类Transform的一个子类,它负责在二维 x-y 坐标系内缩放对象。
如,要对一个TextBlock宽度增大1.5,高度缩小0.5,应该像下面这样编码:
前台:
 
   
< TextBlock x:Name ="textBlock1" Background ="Blue" Width ="100" Height ="50" > abc </ TextBlock >
后台:
 
   
textBlock1.RenderTransform = new ScaleTransform() { ScaleX = 1.5 , ScaleY = 0.5 };

3:变化之TranslateTransform
TranslateTransform也是抽象类Transform的一个子类,它负责在二维 x-y 坐标系内平移(移动)对象。
前台:
 
    
< TextBlock x:Name ="textBlock1" Background ="Blue" Width ="100" Height ="50" > abc </ TextBlock >
< Button x:Name ="buttonTest" Click ="buttonTest_Click" Canvas.Top ="250" > 测试 </ Button >
后台:
 
   
private void buttonTest_Click( object sender, RoutedEventArgs e)
{
textBlock1.RenderTransform
= new TranslateTransform() { X = 50 , Y = 100 };
}
点击后,物体平移。

4:变化之SkewTransform
SkewTransform也是抽象类Transform的一个子类,它负责表示二维扭曲,可用于在二维对象中创建三维深度幻觉。
代码:
 
   
textBlock1.RenderTransform = new SkewTransform() { AngleX = 30 , AngleY = 20 , CenterX = 50 , CenterY = 80 };

5:变化之MatrixTransform
所有的变换,最根本的就是MatrixTransform。也就是以上几种变换,都可以通过MatrixTransform来解决。这需要一些图形的矩阵变换的知识,在这里不做深入讨论。

6:变换合并
如果尝试将以上的变换合并起来,即,假设你进行这样的操作:第一步将textBlock1设置为倾斜45°角,第二步将其平移50,则发现,倾斜角度没有了。如果要合并这样的操作,需要用到TransformGroup。
假设控件的初始状态如下:
 
   
TransformGroup group = new TransformGroup();
group.Children.Add(
new SkewTransform() { AngleX = 30 , AngleY = 20 , CenterX = 50 , CenterY = 80 });
textBlock1.RenderTransform
= group;
要移动的代码如下:
 
   
private void buttonTest_Click( object sender, RoutedEventArgs e)
{
TransformGroup group
= ((textBlock1.RenderTransform) as TransformGroup);
group.Children.Add(
new TranslateTransform() { X = 50 , Y = 100 });
textBlock1.RenderTransform
= group;
}


本文转自最课程陆敏技博客园博客,原文链接:http://www.cnblogs.com/luminji/archive/2011/04/27/2030699.html,如需转载请自行联系原作者

相关文章
|
API C# 开发工具
关于WPF空域的问题
WPF开发时常会遇到空域问题,这个是神烦的一种现象
483 0
关于WPF空域的问题
|
C# Windows
WPF设计の不规则窗体
原文:WPF设计の不规则窗体   我们在工作中,经常会需要画一些不规则的窗体,现在总结如下。 一、利用VisualBrush实现。这依赖于VisualBrush的特性,任何控件可以作为画刷,而画刷又可以作为背景。
944 0
|
C#
WPF中的3D变换PlaneProjection
原文:WPF中的3D变换PlaneProjection 在UWP中有一个比较好用的伪3D变换PlaneProjection,可以以一种轻量级和非常简单的方式实现3D的效果。这种效果在Silverlight中也有这种变换,但在WPF中确一直没有提供。
860 0
|
C#
WPF图形/文字特别效果之一:交叉效果探讨
原文:WPF图形/文字特别效果之一:交叉效果探讨 为了说明问题,先看下图:图1  完全重叠的单一颜色文字它是2008几个字的叠加,并且颜色为单一的红色。
761 0
|
C#
WPF图形/文字特别效果之一:交叉效果探讨(续)
原文:WPF图形/文字特别效果之一:交叉效果探讨(续) 在“WPF图形/文字特别效果之一:交叉效果探讨”(http://blog.csdn.net/johnsuna/archive/2008/05/08/2419404.aspx)一文中,我使用了根据笔画顺序书写及顺时针/逆时针的方式来对交叉块进行分类描述,籍以探讨如何给各交叉色块填充颜色。
937 0
|
C#
WPF 3D 模型旋转
原文:WPF 3D 模型旋转     WPF 是 Microsoft 在 Framework3.0 中支持的一种技术,它能作出很绚丽的界面,同时它也支持3D的操作。在3D操作主要包括平移(Translate)、旋转(Rotation)、缩放(Scale)。
1303 0
|
C# 小程序
WPF 3D变换应用
原文:WPF 3D变换应用  WPF可以提供的3D模型使我们可以轻松地创建3D实体,虽然目前来看还很有一些性能上的问题,不过对于一些简单的3D应用应该是可取的,毕竟其开发效率高,而且也容易上手。         下面给大家演示的是使用在WPF 3D上实现视角变换,通过鼠标拖动来变换观察视角,通过滚轮来放缩视距。
702 0