翼度科技»论坛 编程开发 .net 查看内容

12.旋转、缩放、倾斜、平移Transform

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
RotateTransform旋转
RotateTransform表示旋转一个对象的角度。首先我们来看一下它的定义
  1. public sealed class RotateTransform : Transform
  2. {
  3.     public static readonly DependencyProperty AngleProperty;
  4.     public static readonly DependencyProperty CenterXProperty;
  5.     public static readonly DependencyProperty CenterYProperty;
  6.     public RotateTransform();
  7.     public RotateTransform(double angle);
  8.     public RotateTransform(double angle, double centerX, double centerY);
  9.     public double Angle { get; set; }
  10.     public double CenterX { get; set; }
  11.     public double CenterY { get; set; }
  12.     public override Matrix Value { get; }
  13. public RotateTransform Clone();
  14. public RotateTransform CloneCurrentValue();
  15. protected override Freezable CreateInstanceCore();
  16. }
复制代码
Angle属性表示获取或设置顺时针旋转的角度(以度为单位)。默认值是0度。
CenterX 和CenterY 表示获取或设置旋转中心点的 x y坐标,Value属性表示当前转换的矩阵。
通常我们只需要设置Angle、CenterX 和CenterY即可
案列:
  1. <Button Grid.Column="1"
  2.                 Width="100"
  3.                 Height="25"
  4.                 Content="RotateTransform"
  5.                 HorizontalAlignment="Center"
  6.                 VerticalAlignment="Center">
  7.             <Button.<strong>RenderTransform</strong>>
  8.                 <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
  9.                                  CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
  10.             </Button.RenderTransform>
  11.         </Button>
  12. <Slider x:Name="slider"
  13.                 Grid.ColumnSpan="3"
  14.                 Margin="30"
  15.                 HorizontalAlignment="Left"
  16.                 VerticalAlignment="Bottom"
  17.                 Value="0"
  18.                 Maximum="720"
  19.                 Width="400" />
复制代码
 
ScaleTransform缩放
ScaleTransform表示在二维xy坐标系内缩放对象。所以它放大缩小的方向只有两个,分别是X方向和Y方向。另外,每个方向上需要设置一个中心点。
  1. public sealed class ScaleTransform : Transform
  2. {
  3.     public static readonly DependencyProperty ScaleXProperty;
  4.     public static readonly DependencyProperty ScaleYProperty;
  5.     public static readonly DependencyProperty CenterXProperty;
  6.     public static readonly DependencyProperty CenterYProperty;
  7.     public ScaleTransform();
  8.     public ScaleTransform(double scaleX, double scaleY);
  9.     public ScaleTransform(double scaleX, double scaleY, double centerX, double centerY);
  10.     public double ScaleX { get; set; }
  11.     public double ScaleY { get; set; }
  12.     public double CenterX { get; set; }
  13.     public double CenterY { get; set; }
  14.     public override Matrix Value { get; }
  15.     public ScaleTransform Clone();
  16.     public ScaleTransform CloneCurrentValue();
  17.     protected override Freezable CreateInstanceCore();
  18. }
复制代码
ScaleX属性:获取或设置X轴缩放比例。
ScaleY属性:获取或设置Y轴缩放比例。
CenterX属性:获取或设置当前缩放对象的X轴的中心坐标。
CenterY属性:获取或设置当前缩放对象的Y轴的中心坐标。
案例:
  1. <Button Grid.Column="1"
  2.                 Width="100"
  3.                 Height="25"
  4.                 Content="RotateTransform"
  5.                 HorizontalAlignment="Center"
  6.                 VerticalAlignment="Center">
  7.             <Button.<strong>RenderTransform</strong>>
  8.                 <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
  9.                                  CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
  10.             </Button.RenderTransform>
  11.         </Button>
  12. <Slider x:Name="slider"
  13.                 Grid.ColumnSpan="3"
  14.                 Margin="30"
  15.                 HorizontalAlignment="Left"
  16.                 VerticalAlignment="Bottom"
  17.                 Value="0"
  18.                 Maximum="720"
  19.                 Width="400" /> <Button Grid.Column="1"
  20.                 Width="100"
  21.                 Height="25"
  22.                 Content="RotateTransform"
  23.                 HorizontalAlignment="Center"
  24.                 VerticalAlignment="Center">
  25.             <Button.<strong>RenderTransform</strong>>
  26.                 <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
  27.                                  CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
  28.             </Button.RenderTransform>
  29.         </Button>
  30. <Slider x:Name="slider"
  31.                 Grid.ColumnSpan="3"
  32.                 Margin="30"
  33.                 HorizontalAlignment="Left"
  34.                 VerticalAlignment="Bottom"
  35.                 Value="0"
  36.                 Maximum="720"
  37.                 Width="400" />                             
复制代码
 
SkewTransform倾斜
SkewTransform表示倾斜某个对象,它有两个方向的倾斜角度可以设置,AngleX表示设置x 轴倾斜角度,该角度是从 y 轴逆时针旋转后测量得到,单位为度。AngleY表示设置y 轴倾斜角度,该角度通过测量从 x 轴逆时针旋转得到的角度度数。另外,它也有CenterX和CenterY,表示倾斜转换中心的xy坐标。
  1. public sealed class SkewTransform : Transform
  2. {
  3.    public static readonly DependencyProperty AngleXProperty;
  4.    public static readonly DependencyProperty AngleYProperty;
  5.    public static readonly DependencyProperty CenterXProperty;
  6.    public static readonly DependencyProperty CenterYProperty;
  7.    public SkewTransform();
  8.    public SkewTransform(double angleX, double angleY);
  9.    public SkewTransform(double angleX, double angleY, double centerX, double centerY);
  10.    public double AngleX { get; set; }
  11.    public double AngleY { get; set; }
  12.    public double CenterX { get; set; }
  13.    public double CenterY { get; set; }
  14.    public override Matrix Value { get; }
  15.    public SkewTransform Clone();
  16.    public SkewTransform CloneCurrentValue();
  17. }
复制代码
案例:
  1. <Button Grid.Column="1"
  2.                 Width="100"
  3.                 Height="25"
  4.                 Content="RotateTransform"
  5.                 HorizontalAlignment="Center"
  6.                 VerticalAlignment="Center">
  7.             <Button.<strong>RenderTransform</strong>>
  8.                 <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
  9.                                  CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
  10.             </Button.RenderTransform>
  11.         </Button>
  12. <Slider x:Name="slider"
  13.                 Grid.ColumnSpan="3"
  14.                 Margin="30"
  15.                 HorizontalAlignment="Left"
  16.                 VerticalAlignment="Bottom"
  17.                 Value="0"
  18.                 Maximum="720"
  19.                 Width="400" /> <Button Grid.Column="1"
  20.                 Width="100"
  21.                 Height="25"
  22.                 Content="RotateTransform"
  23.                 HorizontalAlignment="Center"
  24.                 VerticalAlignment="Center">
  25.             <Button.<strong>RenderTransform</strong>>
  26.                 <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
  27.                                  CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
  28.             </Button.RenderTransform>
  29.         </Button>
  30. <Slider x:Name="slider"
  31.                 Grid.ColumnSpan="3"
  32.                 Margin="30"
  33.                 HorizontalAlignment="Left"
  34.                 VerticalAlignment="Bottom"
  35.                 Value="0"
  36.                 Maximum="720"
  37.                 Width="400" />                                    
复制代码
 
TranslateTransform平移
TranslateTransform只有X和Y两个属性,分别代表X轴和Y轴上的平移距离。
  1. public sealed class TranslateTransform : Transform
  2. {
  3.     public static readonly DependencyProperty XProperty;
  4.     public static readonly DependencyProperty YProperty;
  5.     public TranslateTransform();
  6.     public TranslateTransform(double offsetX, double offsetY);
  7.     public double X { get; set; }
  8.     public double Y { get; set; }
  9.     public override Matrix Value { get; }
  10.     public TranslateTransform Clone();
  11.     public TranslateTransform CloneCurrentValue();
  12. }
复制代码
 
案例:
  1. <Button Grid.Column="1"
  2.                 Width="100"
  3.                 Height="25"
  4.                 Content="RotateTransform"
  5.                 HorizontalAlignment="Center"
  6.                 VerticalAlignment="Center">
  7.             <Button.<strong>RenderTransform</strong>>
  8.                 <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
  9.                                  CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
  10.             </Button.RenderTransform>
  11.         </Button>
  12. <Slider x:Name="slider"
  13.                 Grid.ColumnSpan="3"
  14.                 Margin="30"
  15.                 HorizontalAlignment="Left"
  16.                 VerticalAlignment="Bottom"
  17.                 Value="0"
  18.                 Maximum="720"
  19.                 Width="400" /> <Button Grid.Column="1"
  20.                 Width="100"
  21.                 Height="25"
  22.                 Content="RotateTransform"
  23.                 HorizontalAlignment="Center"
  24.                 VerticalAlignment="Center">
  25.             <Button.<strong>RenderTransform</strong>>
  26.                 <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
  27.                                  CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
  28.             </Button.RenderTransform>
  29.         </Button>
  30. <Slider x:Name="slider"
  31.                 Grid.ColumnSpan="3"
  32.                 Margin="30"
  33.                 HorizontalAlignment="Left"
  34.                 VerticalAlignment="Bottom"
  35.                 Value="0"
  36.                 Maximum="720"
  37.                 Width="400" />                       
复制代码
在这个例子中,左边的border的TranslateTransform 对象的值直接绑定到slider,拖动两个slider就可以控制border水平和垂直方向的位置。右边的border则利用鼠标按下、移动和抬起事件,初步实现了用鼠标去移动位置的功能
  1. public partial class MainWindow : Window
  2. {
  3.     public Point DownPoint { get; private set; } = new Point(0, 0);
  4.     public bool IsMouseDown { get; private set; } = false;
  5.     public MainWindow()
  6.     {
  7.         InitializeComponent();
  8.     }
  9.     private void Window_MouseMove(object sender, MouseEventArgs e)
  10.     {
  11.         if (!IsMouseDown) return;
  12.         if (border.RenderTransform is TranslateTransform t)
  13.         {
  14.             Point point = e.GetPosition(this);
  15.             t.X = (point.X - DownPoint.X);
  16.             t.Y = (point.Y - DownPoint.Y);
  17.         }
  18.     }
  19.     private void Window_MouseDown(object sender, MouseButtonEventArgs e)
  20.     {
  21.         IsMouseDown = true;
  22.         DownPoint = e.GetPosition(this);
  23.     }
  24.     private void Window_MouseUp(object sender, MouseButtonEventArgs e)
  25.     {
  26.         IsMouseDown = false;
  27.     }
  28. }
复制代码
 

来源:https://www.cnblogs.com/MingQiu/p/18000496
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具