Transform
定义实现二维平面中的转换的功能。 转换包括旋转 (RotateTransform)、缩放 (ScaleTransform)、倾斜 (SkewTransform) 和平移 (TranslateTransform)。 此类层次结构不同于 Matrix 结构,因为它是一个类,而且支持动画和枚举语义。
使用 MatrixTransform 类可创建不由 RotateTransform 、 ScaleTransform 、 SkewTransform 和类提供的自定义转换 TranslateTransform 。
二维 x-y 平面使用3x3 矩阵进行转换。 您可以将仿射转换矩阵相乘,以形成线性转换,如旋转和倾斜 (切变) ,后面是平移。
仿射转换矩阵的最终列等于 (0,0,1) ;因此,您只需指定前两列中的成员。
WPF) Windows Presentation Foundation (Matrix 具有以下结构:
M11 | M12 | 0 |
M21 | M22 | 0 |
OffsetX | OffsetY | 1 |
最后一行中的成员 OffsetX OffsetY 表示转换值。
方法和属性通常将变换矩阵指定为只有六个成员的矢量;如下所示:
(M11, M12, M21, M22, OffsetX, OffsetY)
名称 | 备注 | 权限 |
---|---|---|
Identity | 获取一个恒等变换。 | get; |
Inverse | 获取此变换的逆变换(如果存在)。 | get; |
Value | 以 Matrix 对象的形式获取当前变换。 | get; |
名称 | 备注 | 权限 |
---|---|---|
Clone | 通过深层复制其值创建此 Transform 的可修改副本。 | public |
CloneCurrentValue | 通过制作此 Transform 对象的值的深层副本来创建此对象的可修改复本。 此方法不复制资源引用、数据绑定或动画,但复制其当前值。 | public |
Parse | 通过变换矩阵的指定字符串表示形式创建一个新的 Transform。 | public |
TransformBounds | 变换指定的边界框,并返回一个正好能容纳它的轴对齐的边界框。 | public |
TryTransform | 尝试变换指定的点,并返回指示变换是否成功的值。 | public |
创建一个任意仿射矩阵转换,用于操作二维平面中的对象或坐标系。
使用 MatrixTransform 类可创建不由 RotateTransform 、 SkewTransform 、 ScaleTransform 或类提供的自定义转换 TranslateTransform 。
在二维 x-y 平面中,使用3x3 矩阵进行变换。 您可以将仿射矩阵转换相乘,以形成线性转换,如旋转和倾斜 (切变) ,后面是平移。
仿射矩阵转换的最终列等于 (0,0,1) ;因此,您只需指定前两列中的成员。
WPF) Windows Presentation Foundation (Matrix 具有以下结构:
M11 | M12 | 0 |
M21 | M22 | 0 |
OffsetX | OffsetY | 1 |
最后一行中的成员 OffsetX OffsetY 表示转换值。
方法和属性通常将变换矩阵指定为只有六个成员的矢量;成员如下:
(M11, M12, M21, M22, OffsetX, OffsetY)
在二维 x-y 坐标系内围绕指定点按顺时针方向旋转对象。
RotateTransform按指定的对点旋转对象 Angle CenterX CenterY 。
使用时 RotateTransform ,请注意,转换会针对特定对象( (0,0) 的点)旋转坐标系统。 因此,根据对象的位置,它可能不会围绕中心) (就地旋转。 例如,如果一个对象在 x 轴上的距离为200个单位,则旋转30度可以将对象旋转30度,旋转半径为200的圆,这是围绕原点绘制的。 若要就地旋转对象,请将的和设置为要 CenterX CenterY 旋转的对象的 RotateTransform 中心。
在 2-D x-y 坐标系统内缩放对象。
使用 ScaleTransform 可以水平或垂直拉伸或收缩对象。 ScaleX属性指定沿 x 轴拉伸或收缩对象的程度,而 ScaleY 属性指定沿 y 轴拉伸或收缩对象的量量。 缩放操作以和属性指定的点为中心 CenterX CenterY 。
表示 2-D 倾斜。
SkewTransform用于在二维对象中创建三维深度的错觉。
表示由其他 Transform 对象组成的复合 Transform。
TransformGroup如果要将多个对象应用于 Transform 单个属性,请使用。
在复合转换中,各个转换的顺序非常重要。 例如,如果您首先旋转,然后缩放,然后再翻译,则会得到不同于第一次平移、旋转和缩放的结果。 一个原因是重要的是,旋转和缩放等转换是相对坐标系统的原点完成的。 缩放位于原点中心的对象将生成与缩放离开原点的对象不同的结果。 同样,旋转位于原点中心的对象会产生不同的结果,而不是旋转远离原点的对象。
在二维 x-y 坐标系中平移(移动)对象。
TranslateTransform 定义沿 x 轴和 y 轴的轴对齐平移。 下图显示了通过偏移 (dx, dy) 进行转换的转换矩阵。
二维翻译的典型3x3 矩阵
UIElement.RenderTransform
获取或设置影响此元素的呈现位置的转换信息。 这是依赖项属性。
呈现转换不会重新生成布局大小或呈现大小信息。 呈现转换通常用于对元素进行动画处理或应用临时效果。 例如,元素可能会在聚焦或鼠标指针置于时进行缩放,或可能在负载上抖动以便 (UI) 的用户界面。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Background="LightGoldenrodYellow"/>
<Button Content="Button" FontSize="24" VerticalAlignment="Bottom" HorizontalAlignment="Left">
<Button.RenderTransform>
<RotateTransform Angle="-90" CenterX="0" CenterY="0"/>
</Button.RenderTransform>
</Button>
</Grid>
FrameworkElement.LayoutTransform
获取或设置在执行布局时应该应用于此元素的图形转换方式。
与RenderTransform 不同的 是LayoutTransform 将影响布局的结果。
设置转换可提供缩放和旋转的强大功能。 但会 LayoutTransform 忽略 TranslateTransform 操作。 这是因为的子元素的布局系统行为会 FrameworkElement 自动校正到缩放元素位置和父元素的坐标系统中的任何偏移量。
LayoutTransform 如果在不需要布局系统进行完全传递的方案中调用,则可能导致应用程序性能不佳。 当你将应用 LayoutTransform 到 Children 的集合时 Panel ,它会触发布局系统的新传递,并强制对所有屏幕对象进行值和重新排列。 如果要 (UI) 更新完整的应用程序用户界面,此功能可能正是您所需要的。 但是,如果不需要完全布局处理过程,请使用 RenderTransform 属性,该属性不会调用布局系统,因此通常是此方案的更好选择。
其中有用的示例方案 LayoutTransform 包括:将元素(如菜单组件)从水平旋转到垂直,反之亦然,缩放元素 () 缩放元素,从而提供编辑行为,等等。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Background="LightGoldenrodYellow"/>
<Button Content="Button" FontSize="24" VerticalAlignment="Bottom" HorizontalAlignment="Left">
<Button.LayoutTransform>
<RotateTransform Angle="-90" CenterX="0" CenterY="0"/>
</Button.LayoutTransform>
</Button>
</Grid>