WPF中RenderTransform详解

22 篇文章 78 订阅
订阅专栏

总目录


文章目录

  • 总目录
  • 一、RenderTransform(渲染变换)
    • 1 RenderTransform介绍
    • 2 RenderTransformOrigin(中心点)
    • 3 RenderTransform 和LayoutTransform
  • 二、TranslateTransform(平移)
    • 1 TranslateTransform介绍
    • 2 基于TranslateTransform的滑动动画
  • 三 、RotateTransform(旋转)
    • 1 RotateTransform介绍
    • 2 CenterX和CenterY
    • 3 基于RotateTransform的 加载动画
  • 四、ScaleTransform(缩放)
    • 1 ScaleTransform介绍
    • 2 基于ScaleTransform的放大缩小,翻转和展开的动画
      • 1 放大缩小动画
      • 2 翻转动画
      • 3 展开动画
      • 4 扫描效果动画
  • 五、SkewTransform(倾斜)
    • 1 SkewTransform介绍
  • 六、MatrixTranform(矩阵变换)
    • 1 MatrixTranform介绍
    • 2 使用MatrixTranform 实现平移,旋转,缩放,倾斜
  • 七、TransformGroup(变换组)
  • 八、其他
  • 结语


一、RenderTransform(渲染变换)

1 RenderTransform介绍

  <Border Height="100" Width="100" Background="Red" RenderTransformOrigin="0.5,0.5">
          <Border.RenderTransform>
                 <TransformGroup>
                      <ScaleTransform/>
                      <SkewTransform/>
                      <RotateTransform/>
                      <TranslateTransform/>
                 </TransformGroup>
          </Border.RenderTransform>
  </Border>

WPF提供了下表种的2D Transform 类,用于常见的转换操作

名称描述重要属性
TranslateTranform让对象的位置发生水平方向或竖直方向的直线运动X、Y
RotateTranform让对象的位置围绕中心发生旋转的运动Angle、CenterX、CenterY
ScaleTranform让对象的大小发生变化,放大对象或者缩小对象ScaleX、ScaleY、CenterX、CenterY
SkewTranform让对象的按照设置的角度倾斜AngleX、AngelY、CenterX、CenterY

WPF提供了下表中的类,用于创建复杂的转换效果

名称描述重要属性
MatrixTranform矩阵变换,包含以上所有的变换效果。Matrix
TransformGroup变换组合,可以随意组合上述的各种变换效果,让对象一次应用所有这些变换。
需要注意:应用变换的顺序,因为这会影响最终的变换结果。如:首先使用RotateTranform,然后再使用TranslateTranform,那么就是先旋转控件对象,然后再控件对象。

2 RenderTransformOrigin(中心点)

默认 RenderTransformOrigin=“0.5,0.5”,下面通过图形理解一下:
在这里插入图片描述
以Image控件的RenderTransformOrigin的属性为例: RenderTransformOrigin是一个比例尺寸,X 和Y 的值,范围均是从0到1

3 RenderTransform 和LayoutTransform

可以通过以下两种方式之一向元素应用转换:

  • 如果不希望转换影响布局,请使用该元素的 RenderTransform 属性。
  • 如果希望转换影响布局,请使用该元素的 LayoutTransform 属性。

在这里插入图片描述

二、TranslateTransform(平移)

1 TranslateTransform介绍

TranslateTransform的作用就是让对象的位置发生水平方向或竖直方向的直线运动
在这里插入图片描述
上面动图中,只是在项目未运行状态下,在【转换】这一项属性内调整属性值的效果,当我们调整TranslateTransform的X属性和Y属性的时候,会发现控件会在水平方向和竖直方向做直线运动

2 基于TranslateTransform的滑动动画

在这里插入图片描述
以上动画主要就是通过修改对象的TranslateTransform 的X属性值,来实现水平移动的动画效果。

上图侧滑栏代码如下:

<UserControl x:Class="MvvmDemo.Views.ExploreView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:MvvmDemo.Views"
             mc:Ignorable="d"
             d:DesignHeight="450" d:DesignWidth="800">
    <UserControl.Resources>
    
    	<!--【1】首先在资源中定义动画-->

        <Storyboard x:Key="SlipOutStoryboard">
            <DoubleAnimation Duration="0:0:0.2" To="-100" Storyboard.TargetName="tt" Storyboard.TargetProperty="X"/>
        </Storyboard>
        <Storyboard x:Key="SlipInStoryboard">
            <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetName="tt" Storyboard.TargetProperty="X"/>
        </Storyboard>
    </UserControl.Resources>
    <UserControl.Triggers>
    
    	<!--【2】然后在触发器中定义触发动画的路由事件-->
    	
        <EventTrigger RoutedEvent="MouseLeftButtonDown" SourceName="mainBorder" >
            <BeginStoryboard Storyboard="{StaticResource SlipInStoryboard}"></BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="MouseLeftButtonDown" SourceName="sideBorder" >
            <BeginStoryboard Storyboard="{StaticResource SlipOutStoryboard}"></BeginStoryboard>
        </EventTrigger>
    </UserControl.Triggers>
    <Grid  Background="LightGreen">
        <StackPanel  Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Border x:Name="mainBorder" Height="200" Width="200" Background="Green"></Border>
            <Border x:Name="sideBorder" Height="100" Width="100" Background="Red" RenderTransformOrigin="0.5,0.5">
                <Border.RenderTransform>
                    <TransformGroup>
                        <TranslateTransform x:Name="tt" X="0"/>
                    </TransformGroup>
                </Border.RenderTransform>
            </Border>
        </StackPanel>
    </Grid>
</UserControl>

三 、RotateTransform(旋转)

1 RotateTransform介绍

RotateTransform的作用就是让对象的围绕中心发生旋转的运动
在这里插入图片描述

  • 当我们调整RotateTransform的Angle属性的时候,控件对象会绕控件中心旋转
  • 当我们的控件上,具有RenderTransformOrigin(中心点)的属性的时候,是无法设置RotateTransform中的CenterX和CenterY的属性值的,设置时会提示无效
  • 只有去掉控件的RenderTransformOrigin属性,才可设置RotateTransform中的CenterX和CenterY
  • 当设置 <RotateTransform x:Name="rt" Angle="0" CenterX="0" CenterY="0"/>后效果如下:

在这里插入图片描述

2 CenterX和CenterY

对于CenterX和CenterY的属性值的理解:
在这里插入图片描述
CenterX和CenterY的属性值 设置的是实际 尺寸,而非比例,注意与RenderTransformOrigin区分

3 基于RotateTransform的 加载动画

可以考虑使用一个loading的PNG图片,或者从iconfont上下载图标资源,然后使用RotateTransform实现一个简单的加载动画
在这里插入图片描述
该动画主要是通过动态改变RotateTransform 的Angle值来实现加载动画的旋转,然后辅以AccelerationRatio="0.55" DecelerationRatio="0.45" 属性值的设置,让加载动画显得更自然

加载动画代码如下:

<UserControl x:Class="MvvmDemo.Views.ExploreView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:MvvmDemo.Views"
             mc:Ignorable="d"
             d:DesignHeight="450" d:DesignWidth="800">
    <UserControl.Resources>
        <Storyboard x:Key="StartLoadingStoryboard">
            <DoubleAnimation Duration="0:0:2" To="360" AccelerationRatio="0.55" DecelerationRatio="0.45" RepeatBehavior="Forever" Storyboard.TargetName="rt" Storyboard.TargetProperty="Angle"/>
        </Storyboard>
    </UserControl.Resources>
    <UserControl.Triggers>
        <EventTrigger RoutedEvent="Button.Click" SourceName="btn" >
            <BeginStoryboard Storyboard="{StaticResource StartLoadingStoryboard}"></BeginStoryboard>
        </EventTrigger>
    </UserControl.Triggers>
    <Grid  Background="LightGreen">
        <StackPanel  Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Image x:Name="img" Height="50" Source="/MvvmDemo;component/Res/Images/loading.png" RenderTransformOrigin="0.5,0.5">
                <Image.RenderTransform>
                    <TransformGroup>
                        <RotateTransform x:Name="rt" Angle="0"/>
                    </TransformGroup>
                </Image.RenderTransform>
            </Image>
            <Button x:Name="btn" Height="60" Width="160" Margin="50" Content="测试"></Button>
        </StackPanel>
    </Grid>
</UserControl>

四、ScaleTransform(缩放)

1 ScaleTransform介绍

ScaleTransform的作用就是让对象的大小发生变化,放大或缩小对象
在这里插入图片描述
当我们调整ScaleTransform的ScaleX属性和ScaleY属性的时候,控件就会放大或缩小

2 基于ScaleTransform的放大缩小,翻转和展开的动画

  • 当我们同时变换ScaleTransform 的ScaleX 和ScaleY属性值的就可实现放大和缩小的变化
  • 当我们将<ScaleTransform ScaleX="1"/> 逐渐变换为 <ScaleTransform ScaleX="-1"/>的过程就是一个沿着水平X轴翻转动画
  • 当我们将<ScaleTransform ScaleX="0"/> 逐渐变换为 <ScaleTransform ScaleX="1"/> 的过程就是一个逐渐展开的动画

1 放大缩小动画

在这里插入图片描述
以上动画主要通过动画动态同时调整ScaleTransform 的ScaleX 和ScaleY属性值,实现放大缩小的效果。

放大缩小动画代码如下(示例):

<UserControl x:Class="MvvmDemo.Views.ExploreView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:MvvmDemo.Views"
             mc:Ignorable="d"
             d:DesignHeight="450" d:DesignWidth="800">
    <UserControl.Resources>
        <Storyboard x:Key="BigStoryboard">
            <DoubleAnimation Duration="0:0:1" To="1.5" Storyboard.TargetName="st" Storyboard.TargetProperty="ScaleX"/>
            <DoubleAnimation Duration="0:0:1" To="1.5" Storyboard.TargetName="st" Storyboard.TargetProperty="ScaleY"/>
        </Storyboard>
        <Storyboard x:Key="SmallStoryboard">
            <DoubleAnimation Duration="0:0:1" To="0.5" Storyboard.TargetName="st" Storyboard.TargetProperty="ScaleX"/>
            <DoubleAnimation Duration="0:0:1" To="0.5" Storyboard.TargetName="st" Storyboard.TargetProperty="ScaleY"/>
        </Storyboard>
    </UserControl.Resources>
    <UserControl.Triggers>
        <EventTrigger RoutedEvent="Button.Click" SourceName="btn" >
            <BeginStoryboard Storyboard="{StaticResource BigStoryboard}"></BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="MouseLeftButtonDown" SourceName="img" >
            <BeginStoryboard Storyboard="{StaticResource SmallStoryboard}"></BeginStoryboard>
        </EventTrigger>
    </UserControl.Triggers>
    <Grid  Background="LightGreen">
        <StackPanel  Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Border x:Name="mainBorder" Height="200" Width="200" Background="White" CornerRadius="15">
                <Image x:Name="img" Margin="15" Source="/MvvmDemo;component/Res/Images/lg.png" RenderTransformOrigin="0.5,0.5">
                    <Image.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform x:Name="st" ScaleX="1"/>
                        </TransformGroup>
                    </Image.RenderTransform>
                </Image>
            </Border>
            <Button x:Name="btn" Height="60" Width="160" Margin="50" Content="测试"></Button>
        </StackPanel>
    </Grid>
</UserControl>

2 翻转动画

在这里插入图片描述
以上动画主要通过动画动态同时调整ScaleTransform 的ScaleX 属性值,实现翻转的效果。

翻转动画代码如下(示例):

<UserControl x:Class="MvvmDemo.Views.ExploreView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:MvvmDemo.Views"
             mc:Ignorable="d"
             d:DesignHeight="450" d:DesignWidth="800">
    <UserControl.Resources>
        <Storyboard x:Key="XturnStoryboard">
            <DoubleAnimation Duration="0:0:2" To="-1" Storyboard.TargetName="st" Storyboard.TargetProperty="ScaleX"/>
        </Storyboard>
        <Storyboard x:Key="XturnBackStoryboard">
            <DoubleAnimation Duration="0:0:2" To="1" Storyboard.TargetName="st" Storyboard.TargetProperty="ScaleX"/>
        </Storyboard>
    </UserControl.Resources>
    <UserControl.Triggers>
        <EventTrigger RoutedEvent="Button.Click" SourceName="btn" >
            <BeginStoryboard Storyboard="{StaticResource XturnStoryboard}"></BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="MouseLeftButtonDown" SourceName="img" >
            <BeginStoryboard Storyboard="{StaticResource XturnBackStoryboard}"></BeginStoryboard>
        </EventTrigger>
    </UserControl.Triggers>
    <Grid  Background="LightGreen">
        <StackPanel  Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Border x:Name="mainBorder" Height="200" Width="200" Background="White" CornerRadius="15">
                <Image x:Name="img" Margin="15" Source="/MvvmDemo;component/Res/Images/lg.png" RenderTransformOrigin="0.5,0.5">
                    <Image.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform x:Name="st" ScaleX="1"/>
                        </TransformGroup>
                    </Image.RenderTransform>
                </Image>
            </Border>
            <Button x:Name="btn" Height="60" Width="160" Margin="50" Content="测试"></Button>
        </StackPanel>
    </Grid>
</UserControl>

3 展开动画

在这里插入图片描述
以上动画主要通过动画动态同时调整ScaleTransform 的ScaleX 属性值,将ScaleY 由0.1动态变换到1,实现展开的效果。

翻转动画代码如下(示例):

<UserControl x:Class="MvvmDemo.Views.ExploreView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:MvvmDemo.Views"
             mc:Ignorable="d"
             d:DesignHeight="450" d:DesignWidth="800">
    <UserControl.Resources>
        <Storyboard x:Key="OpenStoryboard">
            <DoubleAnimation Duration="0:0:2" To="1" Storyboard.TargetName="st" Storyboard.TargetProperty="ScaleY"/>
        </Storyboard>
        <Storyboard x:Key="CloseStoryboard">
            <DoubleAnimation Duration="0:0:2" To="0.1" Storyboard.TargetName="st" Storyboard.TargetProperty="ScaleY"/>
        </Storyboard>
    </UserControl.Resources>
    <UserControl.Triggers>
        <EventTrigger RoutedEvent="Button.Click" SourceName="btn" >
            <BeginStoryboard Storyboard="{StaticResource OpenStoryboard}"></BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="MouseLeftButtonDown" SourceName="img" >
            <BeginStoryboard Storyboard="{StaticResource CloseStoryboard}"></BeginStoryboard>
        </EventTrigger>
    </UserControl.Triggers>
    <Grid  Background="LightGreen">
        <StackPanel  Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Border x:Name="mainBorder" Height="200" Width="200" Background="White" CornerRadius="15">
                <Image x:Name="img" Margin="15" Source="/MvvmDemo;component/Res/Images/lg.png" RenderTransformOrigin="0.5,0.5" VerticalAlignment="Top">
                    <Image.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform x:Name="st" ScaleY="0.1"/>
                        </TransformGroup>
                    </Image.RenderTransform>
                </Image>
            </Border>
            <Button x:Name="btn" Height="60" Width="160" Margin="50" Content="测试"></Button>
        </StackPanel>
    </Grid>
</UserControl>

但是这种效果,图像都有些变形了,并不是最佳的动画效果!

4 扫描效果动画

在这里插入图片描述
优化动画,该动画与本章内容关联不大,作为展开动画的优化版了解一下;
以上动画主要通过OpacityMask与LinearGradientBrush(径向渐变) 的组合应用来实现。

翻转动画代码如下(示例):

<UserControl x:Class="MvvmDemo.Views.ExploreView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:MvvmDemo.Views"
             mc:Ignorable="d"
             d:DesignHeight="450" d:DesignWidth="800">
    <UserControl.Resources>
        <Storyboard x:Key="ScanStoryboard" FillBehavior="Stop">
            <DoubleAnimation Duration="0:0:2"  To="1" Storyboard.TargetName="gs2" Storyboard.TargetProperty="Offset"></DoubleAnimation>
            <DoubleAnimation Duration="0:0:2"  To="1" Storyboard.TargetName="gs3" Storyboard.TargetProperty="Offset"></DoubleAnimation>
            <ThicknessAnimation Duration="0:0:2" To="0,200,0,0" Storyboard.TargetName="scan" Storyboard.TargetProperty="Margin"></ThicknessAnimation>
        </Storyboard>
    </UserControl.Resources>
    <UserControl.Triggers>
        <EventTrigger RoutedEvent="MouseLeftButtonDown" SourceName="grid" >
            <BeginStoryboard Storyboard="{StaticResource ScanStoryboard}" ></BeginStoryboard>
        </EventTrigger>
    </UserControl.Triggers>
    <Grid x:Name="grid" Background="White">
        <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Grid Height="200" Width="200">
                <Grid.Background>
                    <ImageBrush ImageSource="/MvvmDemo;component/Res/Images/2.png"/>
                </Grid.Background>
                <Rectangle x:Name="scan" Height="8" Margin="0,-4,0,0" VerticalAlignment="Top" Panel.ZIndex="2" RadiusX="20" RadiusY="20">
                    <Rectangle.Fill>
                        <RadialGradientBrush Opacity="0.8">
                            <GradientStop Color="#FF7BF58C" Offset="0"/>
                            <GradientStop Color="#FF2CF53E" Offset="0.5"/>
                            <GradientStop Color="#80DEF7BA" Offset="1"/>
                        </RadialGradientBrush>
                    </Rectangle.Fill>
                </Rectangle>
                <Rectangle>
                    <Rectangle.OpacityMask>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop x:Name="gs1" Color="#ff000000" Offset="0"/>
                            <GradientStop x:Name="gs2" Color="#ff000000" Offset="0"/>
                            <GradientStop x:Name="gs3" Color="#00000000" Offset="0"/>
                        </LinearGradientBrush>
                    </Rectangle.OpacityMask>
                    <Rectangle.Fill>
                        <ImageBrush ImageSource="/MvvmDemo;component/Res/Images/lg.png"/>
                    </Rectangle.Fill>
                </Rectangle>
            </Grid>
        </StackPanel>
    </Grid>
</UserControl>

这种效果,以前做人脸识别签到的项目的时候,经常会用到;比如当前画面本身为摄像头的时候画面,当检测到人脸后,需要显示人脸签到的信息,停留片刻,再回到摄像头的界面上!
实现这种效果,关键是:OpacityMask与LinearGradientBrush(径向渐变) 运用的结合

<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    <GradientStop x:Name="gs1" Color="#ff000000" Offset="0"/>
    <GradientStop x:Name="gs2" Color="#ff000000" Offset="0"/>
    <GradientStop x:Name="gs3" Color="#00000000" Offset="0"/>
</LinearGradientBrush>

想要使用LinearGradientBrush 做这种动画,必须有三个渐变点GradientStop ,
我们知道当每个渐变点的Offset值不一样,就会产生渐变,
然而,当其中两个渐变点的Offset值一样,表示这两个点重合,那么这两个重合渐变点与第三个渐变点,如果颜色不一样的话,就会从视觉上产生两个区域。再辅以渐变点颜色的设置,弄一个透明区域和一个不透明区域即可。
在这里插入图片描述

五、SkewTransform(倾斜)

1 SkewTransform介绍

ScaleTransform的作用就是让对象的按照设置的角度倾斜
在这里插入图片描述
当我们调整SkewTransform的AngleX属性和AngleY属性的时候,控件会根据设置的角度倾斜

六、MatrixTranform(矩阵变换)

1 MatrixTranform介绍

表示用于在二维空间中进行转换的 3x3 仿射转换矩阵。通过操作矩阵值,可以旋转、缩放、倾斜和移动(转换)对象。
在方法和属性中,转换矩阵通常指定为只有六个成员的向量:(M11, M12, M21, M22, OffsetX, OffsetY)

		<!--方式1,指定成员名赋值-->
        <Button Width="100" Height="50" Content="Button">
            <Button.RenderTransform>
                <MatrixTransform x:Name="myMatrixTransform">
                    <MatrixTransform.Matrix >
                        <Matrix M11="3" M12="2" M21="1" M22="2" OffsetX="10" OffsetY="100"/>
                    </MatrixTransform.Matrix>
                </MatrixTransform>
            </Button.RenderTransform>
        </Button>
		<!--方式2:按照指定格式给Matrix属性赋值-->
		<!--语法格式:”m11, m12, m21, m22, offsetX, offsetY“ -->
        <Button Width="100" Height="50" Content="Button">
            <Button.RenderTransform>
                <MatrixTransform x:Name="myMatrixTransform2" Matrix="3,2,1,2,10,100"/>
            </Button.RenderTransform>
        </Button>
  • 更改Matrix的 OffsetX, OffsetY的值,如同修改TranslateTransform的X和Y

2 使用MatrixTranform 实现平移,旋转,缩放,倾斜

在这里插入图片描述

七、TransformGroup(变换组)

使用 TransformGroup 将两个或更多 Transform 对象合并为一个复合 Transform。

    <Button Content="Button" Height="30" Width="100">
        <Button.RenderTransform>
            <TransformGroup>
                <RotateTransform Angle="45" />
                <ScaleTransform  ScaleX="2" ScaleY="2"/>
                <SkewTransform AngleX="10" AngleY="20"/>
                <TranslateTransform X="20"/>
            </TransformGroup>
        </Button.RenderTransform>
    </Button>

八、其他

2D 变换,即是使用 2D Transform 类旋转、缩放、移动(转换)和倾斜 FrameworkElement 对象。

下表是常见转换属性
在这里插入图片描述


结语

以上就是本文的内容,希望以上内容可以帮助到您,如文中有不对之处,还请批评指正。


参考文档:
变换概述

【愚公系列】2023年10月 WPF控件专题 Path控件详解
时光隧道
07-09 9767
WPF控件是Windows Presentation Foundation(WPF的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF常见的标准用户界面元素。自定义控件则允许开发人员使用XAML和C#等编程语言来创建个性化的用户界面元素。自定义控件可以根据需求提供更多的功能和自定义化选项,以及更好的用户体验。
C# WPF--Transform 实例下载 放大图形 源代码
02-02
C# WPF--Transform 实例下载 放大图形 源代码 说明见:http://blog.csdn.net/tianjing_1983/article/details/1548470
不可不知的WPF转换(Transform
最新发布
绳锯木断,水滴石穿,专心写文,无问西东!!!
09-14 986
转换(Transform)定义如何将控件从一个坐标空间映射或转换到另一个坐标空间。2D转换可以通过Matrix来实现,Matrix是一个3行3列的double值的集合。不过WPF还提供了多个Transform类,以便在不知道基础矩阵结构配置的情况下转换对象。RotateTransform,按指定的角度(Angle)旋转元素。ScaleTansform,按指定的坐标方向(ScaleX和ScaleY)缩放元素。SkewTransform,按指定的角度(AngleX和AngleY)倾斜元素。
WPF使用RenderTransformOrigin来控制动画的起点
zunguitiancheng的专栏
08-23 963
WPF使用RenderTransformOrigin来控制动画的起点
WPF 动态变换(RenderTransform和LayoutTransform
technologyleader的专栏
12-01 4682
布局系统 WPF提供两种变换方式,分别是LayoutTransformRenderTransform。从字面意思来讲LayoutTransform是布局变换,后者RenderTransform是渲染变换。 在WPF,许多绘图任务通过使用变换(transform)可以变得更加简单——变换是通过不加通告地切换形状或元素使用的坐标系统来改变形状或元素绘制方式的对象。在WPF,变换的一些类大多继承自System.Windows.Media.Trandform。下面是这些类的列表: TranslateTr
WPF经典编程实例/C#/.NET/MVVM/WCF/XAML/WinForm
06-28
本课程通过一个个实战的案例,详细介绍了在WPF编程用到的各种技巧,帮你进一步掌握WPF这种优秀的编程框架。也许你曾经为了一个WPF又酷又炫的功能,查遍资料却终无所获,最后无奈遗憾放弃。如果你学习了这门课程,要么再回味一下这门课程“曾经赵老师讲过,这样可以实现”,再看看视频,再看看代码,也许再也不留遗憾。如果你是WPF的开发人员、或者是WPF的爱好者,学习这门课,将为你节省大量自我探索的时间成本。
c# WPF 动态曲线显示
01-10
在C# WPF环境,动态曲线显示是一项常见的需求,特别是在数据可视化、实时监控或图形用户界面设计WPF(Windows Presentation Foundation)是.NET Framework的一部分,提供了强大的图形渲染能力和丰富的UI设计...
WPF 走马灯特效
04-12
**WPF走马灯特效详解** 在Windows Presentation Foundation(WPF,走马灯(Carousel)是一种常见的视觉效果,通常用于展示轮播图片、文本或其他元素。它以动态的方式循环展示内容,为用户界面增添生动性和吸引...
WPF基础教程之形状画刷与变换详解
08-26
在Windows Presentation Foundation (WPF) ,形状和画刷是创建可视化用户界面的基本元素。本教程将深入探讨WPF的形状、画刷以及变换的概念,帮助开发者更好地理解和应用这些技术。 首先,WPF的形状是基于`...
WPF实现笑脸表情动画
04-13
**WPF实现笑脸表情动画详解** Windows Presentation Foundation (WPF) 是Microsoft开发的一种用户界面框架,用于构建桌面应用程序。在WPF,动画是通过改变UI元素的属性随着时间的推移来实现动态效果的一种强大...
WPF转盘程序
12-22
**WPF转盘程序详解** 在本文,我们将深入探讨如何使用C#和Windows Presentation Foundation (WPF) 创建一个功能完善的圆形转盘程序。WPF是.NET Framework的一部分,它为开发人员提供了丰富的用户界面(UI)设计...
9WPF---图形变换与渲染
qq_58563355的博客
11-29 406
RotateTransform Angle="45" CenterX="50" CenterY="50"/>以心点进行旋转。5.MatrixTransform:使用提供的矩阵的乘积修改坐标系统。2.TranslateTransform:将坐标系统移动一定的距离。4.SkewTransform:通过倾斜一定的角度扭曲坐标系统。3.ScaleTransform:放大或最小坐标系统。1.RolateTransform:旋转坐标系统。10.DrawingBrush:笔刷。相对容器,网格会随盒子大小缩放。
WPF 精修篇 旋转 RotateTransForm
时意
12-05 4226
旋转RotateTransform Angle 角度 CenterY ,CenterX 心点位置 和缩小一样 左侧 和右侧 做了对比 <StackPanel Orientation="Horizontal"> <Image Source="Image/Dog.jpg" Width="200" Height="200"&gt...
WPF: RenderTransform特效
weixin_33853827的博客
03-04 395
WPF的变形(RenderTransform)类是为了达到直接去改变某个Silverlight对象的形状(比如缩放、旋转一个元素)的目的而设计的,RenderTransform包含的变形属性成员就是专门用来改变Silverlight对象形状的,它可以实现对元素拉伸,旋转,扭曲等效果,同时变形特效也常用于辅助产生各种动画效果。 1. RenderTransform类: 该类成员如下: Tra...
WPF--旋转变换(RotateTransform
zoushier的博客
04-09 564
在标签上添加name属性,再写doubleAnimation标签时候设置storyboard.TargetName=name属性值。不添加name属性 根据RenderTransform.children[0]找动画标签。CenterX="50" CenterY="20" 可以设置旋转的心点,这俩个值是宽度一半和高度一半。TransformGroup 变换组 可以多个变换,支持平移 也支持旋转。问题产生:只设置了Angle角度的图像会默认以左上角(即0,0点)旋转。="90" 一开始旋转的效果。
WPF rotatetransform 心旋转
m0_51162845的博客
07-08 624
rotatetransform
UWP文字旋转的锚点 RenderTransformOrigin
遥远的心
10-19 528
在UWP文字旋转不能再用LayoutTranform了,只能用RenderTransform。在文字旋转过程,我们会问旋转的锚点在哪里,是在文字的心,还是文字的左上角呢?这个其实是通过TextBlock的RenderTransformOrigin属性控制的,它的值是两个比率,表明锚点在文字的X,Y方向的什么地方。RenderTransformOrigin=“0,0” 代表旋转锚点在文字的左上角,RenderTransformOrigin=“0.5,0.5”表示旋转的锚点在文字的心。看下面的例子就比较
WPF入门到跪下 第六章 图形-渲染
jjailsa的博客
01-06 1170
通过转换器,来接收绑定属性,根据属性来返回。
wpf prism viewmodel详解
05-26
WPF(Windows Presentation Foundation)是一个用于创建 Windows 应用程序的框架,而 Prism 是一个基于 WPF 的框架,它提供了一组设计模式和工具,用于帮助开发人员创建可扩展、可重用和易于维护的应用程序。 在 Prism ,ViewModel 是一个重要的组件,它的作用是将 View(即用户界面)与 Model(即数据和业务逻辑)解耦,使得两者可以独立进行开发和测试。 在 Prism ,ViewModel 通常是一个简单的类,它实现了 INotifyPropertyChanged 接口,用于实现数据绑定。ViewModel 还包含了一些命令(Command),用于处理用户交互事件,比如按钮点击、菜单选择等。ViewModel 还可以使用服务(Service)来访问 Model,以获取或操作数据。 下面是一个简单的 ViewModel 的示例: ```csharp public class MainViewModel : BindableBase { private readonly IMyService _myService; private string _name; public string Name { get { return _name; } set { SetProperty(ref _name, value); } } private ICommand _helloCommand; public ICommand HelloCommand { get { if (_helloCommand == null) { _helloCommand = new DelegateCommand(ExecuteHelloCommand); } return _helloCommand; } } public MainViewModel(IMyService myService) { _myService = myService; } private void ExecuteHelloCommand() { string message = _myService.GetMessage(Name); MessageBox.Show(message); } } ``` 在上面的代码,MainViewModel 包含了一个字符串属性 Name 和一个 ICommand 属性 HelloCommand。Name 属性用于将用户界面的文本框绑定到 ViewModel ,而 HelloCommand 则表示用户点击“Hello”按钮时要执行的命令。HelloCommand 的实现是通过调用一个服务(IMyService)来获取一条消息,然后通过 MessageBox 显示出来。 需要注意的是,MainViewModel 的构造函数注入了一个 IMyService 接口,这个接口封装了对数据和业务逻辑的访问,使得 ViewModel 可以与具体的实现解耦。这种依赖注入的方式可以使得应用程序的组件更加松散耦合,更加易于维护和测试。 总之,ViewModel 是 WPF Prism 非常重要的一个组件,它用于实现视图与模型之间的解耦和交互。开发人员可以使用 ViewModel 实现数据绑定、命令处理、服务访问等功能,从而创建可扩展、可重用和易于维护的应用程序。
写文章

热门文章

  • hosts文件配置以及DNS原理解析 33296
  • Win10 如何添加一个本地用户 20209
  • C# 委托详解 18512
  • c#之反射详解 18238
  • WPF中如何实现页面的切换和Window的跳转切换 14791

分类专栏

  • C# 49篇
  • 工具 6篇
  • 其他 4篇
  • Window系统知识点 13篇
  • WPF 22篇
  • 前端技术 3篇
  • 上位机
  • 编程基础 2篇
  • 似是而非的编程名词解释 1篇
  • 总目录
  • Git系统学习 1篇
  • SqlServer 4篇

最新评论

  • C# 委托详解

    当下就是最好: 简直太棒了

  • VS2022离线安装包 - 下载安装教程

    xiaohe_ya: 您好 请问执行命令后没反应是怎么回事呀

  • C#使用 Async 和 Await 的异步编程

    yanzean: 在winform中,主线程遇到await后,还是百分百由主线程执行await后面的代码,winform和WPF都是这种特殊机制

  • ASP.NET Core Web API 使用Autofac框架

    猿享天开: 博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享

  • C# 设计模式之适配器模式

    穷苦书生_万事愁: 博主的这篇文章真的让我对C#设计模式中的适配器模式有了全新的认识,细节描写非常到位,让我感受到了博主的深厚功底。期待博主接下来能够持续分享更多这样有价值的好文,同时也希望能够得到博主的指导,共同进步。在这里非常感谢博主的分享和支持!

大家在看

  • Verilog:参数(parameter)的使用
  • 浮点数储存
  • 【车间调度】白鲸算法BWO求解零空闲流水车间调度问题NIFSP【含Matlab源码 7936期】
  • 排序算法 —— 归并排序(理论+代码)
  • 10.23学习

最新文章

  • C# 中yield 的使用详解
  • C#设计模式之解释器模式
  • C#设计模式之备忘录模式
2024年30篇
2023年32篇
2022年44篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家湖南玻璃钢雕塑之家金昌公园玻璃钢雕塑安装漳州玻璃钢雕塑哪里有玻璃钢雕塑多人人物福建玻璃钢雕塑批发扬州玻璃钢雕塑敦化玻璃钢雕塑价格仿真玻璃钢雕塑生产汕头公仔玻璃钢雕塑陕西玻璃钢骆驼雕塑宝山区玻璃钢雕塑制作石家庄创意玻璃钢雕塑设计泡沫玻璃钢雕塑施工哪家好威海形象玻璃钢雕塑商丘标识玻璃钢仿铜雕塑厂家合肥春节商场美陈方案商场美陈的美陈概述玻璃钢恐龙雕塑厂福建福州玻璃钢雕塑长春商场美陈公司台州公园玻璃钢雕塑河南步行街玻璃钢雕塑生产厂家太原小区玻璃钢雕塑价格丽水玻璃钢雕塑价格举办商场美陈大赛的意义玉溪玻璃钢雕塑厂绍兴大型商场美陈山东中庭商场美陈有哪些东营玻璃钢卡通雕塑厂家批发南充玻璃钢浮雕人物山水雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化