WPF中呈现变形与布局变形的区别

引例

文章一开始,先给出下图所示的画面布局。

 

图1 画面布局设计图

画面被分割成4行4列16个单元格,在1行2列的位置放置一个TextBlock控件并将其背景色设置为淡蓝色。 

对应的XAML代码为:

<Window x:Class="WpfTransformExp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="400" Width="400">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <TextBlock Text="Transform" Grid.Column="1" Grid.Row="0" Background="Aqua">       
        </TextBlock>
    </Grid>
</Window>


呈现变形(RenderTransform)

下面对画面中的TextBlock控件执行RenderTransform操作,需要为TextBlock控件的RenderTransform属性进行赋值:

<TextBlock Text="Transform" Grid.Column="1" Grid.Row="0" Background="Aqua">
   <TextBlock.RenderTransform>
      <RotateTransform Angle="90"/>
   </TextBlock.RenderTransform>
</TextBlock>
代码中为TextBlock控件的RenderTransform属性赋值RotateTransform,RotateTransform表示旋转变形,以给定的点为旋转中心,以给定的角度为单位进行旋转。这里为RotateTransform的Angle属性赋值为90,表示以TextBlock控件左上角为旋转中心顺时针方向旋转90度,得到下图所示效果图。

 

图2 呈现变形效果图

 

布局变形(LayoutTransform)

下面再对画面中的TextBlock控件执行LayoutTransform操作,需要为TextBlock控件的LayoutTransform属性进行赋值:

<TextBlock Text="Transform" Grid.Column="1" Grid.Row="0" Background="Aqua">
   <TextBlock.LayoutTransform>
       <RotateTransform Angle="90"/>
   </TextBlock.LayoutTransform>
</TextBlock>
代码中同样为TextBlock控件的RenderTransform属性赋值RotateTransform对象,RotateTransform对象的Angle属性同样被赋值为90,表示以TextBlock控件左上角为旋转中心顺时针方向旋转90度,得到下图所示效果图。

 

图3 布局变形效果图

 

呈现变形与布局变形的区别

对比呈现变形与布局变形的效果图,可以发现:

两种变形均能达到让TextBlock控件顺时针方向旋转90度的效果。只是变形后,TextBlock控件的呈现位置不一样,使用呈现变形后的TextBlock控件位于1行1列的位置,这与以TextBlock控件左上角为旋转中心将控件顺时针方向旋转90度后所处的位置一致,而使用布局变形后的TextBlock控件却仍然位于1行2列的位置。这是因为:呈现变形只改变元素的呈现效果,并不会改变画面的布局;而布局变形不仅可以改变画面的呈现效果,还会影响画面的布局。所以,本例中的TextBlock控件使用布局变形后,不仅能够顺时针方向旋转90度,还能够被重新定位至1行2列的位置。在这个过程中需要重新测算和绘制画面,所以,使用布局变形时会影响系统性能。

 

补充

本文中呈现变形和布局变形都被赋值为RotateTransform,除了可以被赋值为RotateTransform外,还可以使用下列选项进行赋值:

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

这些类均派生自Transform抽象类。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值