WPF快速指导14:变换

简介: WPF快速指导14:变换 变换,也叫变形(transform)。它定义了从一个坐标空间到另一个坐标空间的映射。变换通过矩阵来描述。变换包括旋转、伸缩、倾斜、调动,这些行为都是矩阵变换。用户还可以实现自己的矩阵。
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。两个矩形的最终样式如下:

img_b4caf24807f373e975c4bf3949b96c17.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;
}


Creative Commons License本文基于 Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 http://www.cnblogs.com/luminji(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。
目录
相关文章
|
4月前
|
C#
WPF —— 动画缩放变换
`ScaleTransform`用于二维x-y坐标系中对象的缩放,可沿X或Y轴调整。在故事板中,通过RenderTransform.ScaleX和ScaleY属性控制缩放。示例代码展示了如何设置按钮的RenderTransformOrigin、Background等属性,并通过LayoutTransform应用ScaleTransform。当鼠标进入按钮时,EventTrigger启动DoubleAnimation实现X和Y轴的缩放动画。最后,展示了如何将动画集成到自定义按钮样式中。
112 0
|
C#
WPF中的3D变换PlaneProjection
原文:WPF中的3D变换PlaneProjection 在UWP中有一个比较好用的伪3D变换PlaneProjection,可以以一种轻量级和非常简单的方式实现3D的效果。这种效果在Silverlight中也有这种变换,但在WPF中确一直没有提供。
893 0
|
C#
WPF 通过透明度遮罩和变换制作倒影效果
原文:WPF 通过透明度遮罩和变换制作倒影效果   倒影效果 代码   更加复杂的应用 参考 https://blogs.
1352 0
|
C# 小程序
WPF 3D变换应用
原文:WPF 3D变换应用  WPF可以提供的3D模型使我们可以轻松地创建3D实体,虽然目前来看还很有一些性能上的问题,不过对于一些简单的3D应用应该是可取的,毕竟其开发效率高,而且也容易上手。         下面给大家演示的是使用在WPF 3D上实现视角变换,通过鼠标拖动来变换观察视角,通过滚轮来放缩视距。
720 0
|
C# 索引 容器
WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画
原文:WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画 利用WPF的ListView控件实现类似于Winform中DataGrid行背景色交替变换的效果,同时增加鼠标的悬停效果。
1804 0
|
C#
【C#/WPF】Image图片的Transform变换:平移、缩放、旋转
原文:【C#/WPF】Image图片的Transform变换:平移、缩放、旋转 WPF中图像控件Image的变换属性Transform: 平移 缩放 旋转 即要想实现图片的平移、缩放、旋转,是修改它所在的Image控件的Transform变换属性。
4930 0
|
C# 索引
WPF快速指导3:数据绑定
WPF快速指导3:数据绑定  本文摘要:1:实体类的绑定;2:实体类集合的绑定及DataTemplate;3:自定义的实体类集合,如ObservableDictionary; 4:Path的语法; 1:实体类的绑定          理解WPF数据绑定,首先需要理解接口INotifyCollectionChanged。
876 0
|
C# 数据格式 XML
WPF快速指导1:资源
WPF快速指导1:资源    本文摘要:    1:资源应用场景;    2:静态资源和动态资源;    3:Application.Current.Resources和Application.Current.Resources.MergedDictionaries     4:路径 一:资源的应用场景场景1:格式化界面显示元素    所谓格式化界面显示元素,就是使用统一的风格来定义软件的每个界面。
757 0
|
C# 开发工具
WPF快速指导8:WPF基元素类
WPF快速指导8:WPF基元素类 本文摘要: 1:什么是基元素类; 2:基元素类的使用; 3:其它重要基类   1:什么是基元素类      WPF中的大部分类都是从 SDK 文档中通常称为基元素类的四个类派生而来。
1399 0