变换Transform

Transform

定义实现二维平面中的转换的功能。 转换包括旋转 (RotateTransform)、缩放 (ScaleTransform)、倾斜 (SkewTransform) 和平移 (TranslateTransform)。 此类层次结构不同于 Matrix 结构,因为它是一个类,而且支持动画和枚举语义。

使用 MatrixTransform 类可创建不由 RotateTransform 、 ScaleTransform 、 SkewTransform 和类提供的自定义转换 TranslateTransform 。

二维 x-y 平面使用3x3 矩阵进行转换。 您可以将仿射转换矩阵相乘,以形成线性转换,如旋转和倾斜 (切变) ,后面是平移。

仿射转换矩阵的最终列等于 (0,0,1) ;因此,您只需指定前两列中的成员。

WPF) Windows Presentation Foundation (Matrix 具有以下结构:

注解
   
M11M120
M21M220
OffsetXOffsetY1

最后一行中的成员 OffsetX OffsetY 表示转换值。

方法和属性通常将变换矩阵指定为只有六个成员的矢量;如下所示:

(M11M12M21M22OffsetXOffsetY)

Transform属性
名称备注权限
Identity获取一个恒等变换。get;
Inverse获取此变换的逆变换(如果存在)。get;
Value以 Matrix 对象的形式获取当前变换。get;
Transform方法
名称备注权限
Clone通过深层复制其值创建此 Transform 的可修改副本。public
CloneCurrentValue通过制作此 Transform 对象的值的深层副本来创建此对象的可修改复本。 此方法不复制资源引用、数据绑定或动画,但复制其当前值。public
Parse通过变换矩阵的指定字符串表示形式创建一个新的 Transformpublic
TransformBounds变换指定的边界框,并返回一个正好能容纳它的轴对齐的边界框。public
TryTransform尝试变换指定的点,并返回指示变换是否成功的值。public

 

 

创建一个任意仿射矩阵转换,用于操作二维平面中的对象或坐标系。

使用 MatrixTransform 类可创建不由 RotateTransform 、 SkewTransform 、 ScaleTransform 或类提供的自定义转换 TranslateTransform 。

在二维 x-y 平面中,使用3x3 矩阵进行变换。 您可以将仿射矩阵转换相乘,以形成线性转换,如旋转和倾斜 (切变) ,后面是平移。

仿射矩阵转换的最终列等于 (0,0,1) ;因此,您只需指定前两列中的成员。

WPF) Windows Presentation Foundation (Matrix 具有以下结构:

注解
   
M11M120
M21M220
OffsetXOffsetY1

最后一行中的成员 OffsetX OffsetY 表示转换值。

方法和属性通常将变换矩阵指定为只有六个成员的矢量;成员如下:

(M11M12M21M22OffsetXOffsetY)

 

在二维 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) 进行转换的转换矩阵。

平移矩阵 100010dxdy1
二维翻译的典型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>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值