不眠之夜 发表于 2024-2-1 11:46:25

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

RotateTransform旋转
RotateTransform表示旋转一个对象的角度。首先我们来看一下它的定义

public sealed class RotateTransform : Transform
{

    public static readonly DependencyProperty AngleProperty;
    public static readonly DependencyProperty CenterXProperty;
    public static readonly DependencyProperty CenterYProperty;

    public RotateTransform();
    public RotateTransform(double angle);
    public RotateTransform(double angle, double centerX, double centerY);

    public double Angle { get; set; }
    public double CenterX { get; set; }
    public double CenterY { get; set; }
    public override Matrix Value { get; }

public RotateTransform Clone();
public RotateTransform CloneCurrentValue();
protected override Freezable CreateInstanceCore();
}Angle属性表示获取或设置顺时针旋转的角度(以度为单位)。默认值是0度。
CenterX 和CenterY 表示获取或设置旋转中心点的 x y坐标,Value属性表示当前转换的矩阵。
通常我们只需要设置Angle、CenterX 和CenterY即可
案列:
<Button Grid.Column="1"
                Width="100"
                Height="25"
                Content="RotateTransform"
                HorizontalAlignment="Center"
                VerticalAlignment="Center">
            <Button.<strong>RenderTransform</strong>>
                <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
                                 CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
            </Button.RenderTransform>
      </Button>


<Slider x:Name="slider"
                Grid.ColumnSpan="3"
                Margin="30"
                HorizontalAlignment="Left"
                VerticalAlignment="Bottom"
                Value="0"
                Maximum="720"
                Width="400" /> 
ScaleTransform缩放
ScaleTransform表示在二维xy坐标系内缩放对象。所以它放大缩小的方向只有两个,分别是X方向和Y方向。另外,每个方向上需要设置一个中心点。

public sealed class ScaleTransform : Transform
{
    public static readonly DependencyProperty ScaleXProperty;
    public static readonly DependencyProperty ScaleYProperty;
    public static readonly DependencyProperty CenterXProperty;
    public static readonly DependencyProperty CenterYProperty;

    public ScaleTransform();
    public ScaleTransform(double scaleX, double scaleY);
    public ScaleTransform(double scaleX, double scaleY, double centerX, double centerY);

    public double ScaleX { get; set; }
    public double ScaleY { get; set; }
    public double CenterX { get; set; }
    public double CenterY { get; set; }
    public override Matrix Value { get; }

    public ScaleTransform Clone();
    public ScaleTransform CloneCurrentValue();
    protected override Freezable CreateInstanceCore();
}ScaleX属性:获取或设置X轴缩放比例。
ScaleY属性:获取或设置Y轴缩放比例。
CenterX属性:获取或设置当前缩放对象的X轴的中心坐标。
CenterY属性:获取或设置当前缩放对象的Y轴的中心坐标。
案例:
<Button Grid.Column="1"
                Width="100"
                Height="25"
                Content="RotateTransform"
                HorizontalAlignment="Center"
                VerticalAlignment="Center">
            <Button.<strong>RenderTransform</strong>>
                <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
                                 CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
            </Button.RenderTransform>
      </Button>


<Slider x:Name="slider"
                Grid.ColumnSpan="3"
                Margin="30"
                HorizontalAlignment="Left"
                VerticalAlignment="Bottom"
                Value="0"
                Maximum="720"
                Width="400" /> <Button Grid.Column="1"
                Width="100"
                Height="25"
                Content="RotateTransform"
                HorizontalAlignment="Center"
                VerticalAlignment="Center">
            <Button.<strong>RenderTransform</strong>>
                <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
                                 CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
            </Button.RenderTransform>
      </Button>


<Slider x:Name="slider"
                Grid.ColumnSpan="3"
                Margin="30"
                HorizontalAlignment="Left"
                VerticalAlignment="Bottom"
                Value="0"
                Maximum="720"
                Width="400" />                            
SkewTransform倾斜
SkewTransform表示倾斜某个对象,它有两个方向的倾斜角度可以设置,AngleX表示设置x 轴倾斜角度,该角度是从 y 轴逆时针旋转后测量得到,单位为度。AngleY表示设置y 轴倾斜角度,该角度通过测量从 x 轴逆时针旋转得到的角度度数。另外,它也有CenterX和CenterY,表示倾斜转换中心的xy坐标。
public sealed class SkewTransform : Transform
{
   public static readonly DependencyProperty AngleXProperty;
   public static readonly DependencyProperty AngleYProperty;
   public static readonly DependencyProperty CenterXProperty;
   public static readonly DependencyProperty CenterYProperty;

   public SkewTransform();
   public SkewTransform(double angleX, double angleY);
   public SkewTransform(double angleX, double angleY, double centerX, double centerY);

   public double AngleX { get; set; }
   public double AngleY { get; set; }
   public double CenterX { get; set; }
   public double CenterY { get; set; }
   public override Matrix Value { get; }

   public SkewTransform Clone();
   public SkewTransform CloneCurrentValue();

}案例:
<Button Grid.Column="1"
                Width="100"
                Height="25"
                Content="RotateTransform"
                HorizontalAlignment="Center"
                VerticalAlignment="Center">
            <Button.<strong>RenderTransform</strong>>
                <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
                                 CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
            </Button.RenderTransform>
      </Button>


<Slider x:Name="slider"
                Grid.ColumnSpan="3"
                Margin="30"
                HorizontalAlignment="Left"
                VerticalAlignment="Bottom"
                Value="0"
                Maximum="720"
                Width="400" /> <Button Grid.Column="1"
                Width="100"
                Height="25"
                Content="RotateTransform"
                HorizontalAlignment="Center"
                VerticalAlignment="Center">
            <Button.<strong>RenderTransform</strong>>
                <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
                                 CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
            </Button.RenderTransform>
      </Button>


<Slider x:Name="slider"
                Grid.ColumnSpan="3"
                Margin="30"
                HorizontalAlignment="Left"
                VerticalAlignment="Bottom"
                Value="0"
                Maximum="720"
                Width="400" />                                      
TranslateTransform平移
TranslateTransform只有X和Y两个属性,分别代表X轴和Y轴上的平移距离。
public sealed class TranslateTransform : Transform
{
    public static readonly DependencyProperty XProperty;
    public static readonly DependencyProperty YProperty;

    public TranslateTransform();
    public TranslateTransform(double offsetX, double offsetY);

    public double X { get; set; }
    public double Y { get; set; }
    public override Matrix Value { get; }

    public TranslateTransform Clone();
    public TranslateTransform CloneCurrentValue();


案例:
<Button Grid.Column="1"
                Width="100"
                Height="25"
                Content="RotateTransform"
                HorizontalAlignment="Center"
                VerticalAlignment="Center">
            <Button.<strong>RenderTransform</strong>>
                <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
                                 CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
            </Button.RenderTransform>
      </Button>


<Slider x:Name="slider"
                Grid.ColumnSpan="3"
                Margin="30"
                HorizontalAlignment="Left"
                VerticalAlignment="Bottom"
                Value="0"
                Maximum="720"
                Width="400" /> <Button Grid.Column="1"
                Width="100"
                Height="25"
                Content="RotateTransform"
                HorizontalAlignment="Center"
                VerticalAlignment="Center">
            <Button.<strong>RenderTransform</strong>>
                <<strong>RotateTransform Angle</strong>="{Binding ElementName=slider,Path=Value}"<strong>
                                 CenterX</strong>="50" <strong>CenterY</strong>="12.5"/>
            </Button.RenderTransform>
      </Button>


<Slider x:Name="slider"
                Grid.ColumnSpan="3"
                Margin="30"
                HorizontalAlignment="Left"
                VerticalAlignment="Bottom"
                Value="0"
                Maximum="720"
                Width="400" />                     在这个例子中,左边的border的TranslateTransform 对象的值直接绑定到slider,拖动两个slider就可以控制border水平和垂直方向的位置。右边的border则利用鼠标按下、移动和抬起事件,初步实现了用鼠标去移动位置的功能
public partial class MainWindow : Window
{
    public Point DownPoint { get; private set; } = new Point(0, 0);
    public bool IsMouseDown { get; private set; } = false;
    public MainWindow()
    {
      InitializeComponent();
    }

    private void Window_MouseMove(object sender, MouseEventArgs e)
    {
      if (!IsMouseDown) return;

      if (border.RenderTransform is TranslateTransform t)
      {
            Point point = e.GetPosition(this);
            t.X = (point.X - DownPoint.X);
            t.Y = (point.Y - DownPoint.Y);
      }
    }

    private void Window_MouseDown(object sender, MouseButtonEventArgs e)
    {
      IsMouseDown = true;
      DownPoint = e.GetPosition(this);
    }

    private void Window_MouseUp(object sender, MouseButtonEventArgs e)
    {
      IsMouseDown = false;
    }


来源:https://www.cnblogs.com/MingQiu/p/18000496
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 12.旋转、缩放、倾斜、平移Transform