wpf-绘图-图形的变形

Transform包括尺寸、位置、坐标系比例、旋转角度等的变化。

WPF中的变形与UI是分开的。例如可以设计一个“向左旋转45度”的变形,然后把这个变形赋值给不同的UI的变形控制属性。这样做的目的是为了减少为UIElement类添加过多属性,且能提高变形类实例的复用性。

控制变形的属性有:(都是依赖属性,数据类型都是Transform抽象类)

  • RenderTransform:定义在UIElement类中,呈现变形
  • LayoutTransform:定义在FrameworkElement类中,布局变形

抽象类Transform的派生类有:

  • MatrixTransform:把容纳被变形UI元素的矩形顶点看作一个矩阵进行变形
  • RotateTransform:以给定的点为旋转中心
  • ScaleTransform:调整坐标系,可产生缩放效果
  • SkewTransform:拉伸变形,在横向和纵向拉伸
  • TranslateTransform:偏移变形,使被变形元素在横向或纵向偏移给定值
  • TransformGroup:变形组,可以把多个独立变形放在一起,产生复合变形效果

用户不能察觉是控件本身位置角度变了,还是呈现的位置与角度变了。但是在窗口上移动UI元素本身会导致窗体布局改变,而窗体布局的每一个变化都会导致所有窗体元素的尺寸测算函数、位置测算函数、呈现函数等被调用,造成系统资源占用激增,程序性能下降。使用呈现变形则不牵扯布局改变,只涉及窗体重绘。这样能提升效率。制作动画需要使用RenderTransform。

RenderTransform

举例:RenderTransform

效果是看到如图所示。没有动作/变化,就是transform完成的图形。
在这里插入图片描述
控件的内容

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Button Width="80" HorizontalAlignment="Left" VerticalAlignment="Top"
                Height="80" Content="Hello">
            <Button.RenderTransform>
                <TransformGroup>
                    <RotateTransform CenterX="40" CenterY="40" Angle="45"/>
                    <TranslateTransform X="100" Y="100"/>
                </TransformGroup>
            </Button.RenderTransform>
        </Button>
    </Grid>

LayoutTransform

布局变形会影响窗体布局,导致窗体布局重新测算。因此,布局变形一半只用于静态变形上,不用于制作动画。

举例:LayoutTransform

如果使用RenderTransform,会扩张到很宽,但是LayoutTransform则会更贴Content的高矮?
在这里插入图片描述

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid x:Name="titleBar" Background="LightBlue">
            <TextBlock Text="Hello Transformer!" FontSize="24"
                       HorizontalAlignment="Left" VerticalAlignment="Bottom">
                <TextBlock.RenderTransform>
                    <RotateTransform Angle="-90"/>
                </TextBlock.RenderTransform>
            </TextBlock>
        </Grid>
    </Grid>

在这里插入图片描述

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid x:Name="titleBar" Background="LightBlue">
            <TextBlock Text="Hello Transformer!" FontSize="24"
                       HorizontalAlignment="Left" VerticalAlignment="Bottom">
                <TextBlock.LayoutTransform>
                    <RotateTransform Angle="-90"/>
                </TextBlock.LayoutTransform>
            </TextBlock>
        </Grid>
    </Grid>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值