-->

如何旋转,平移和缩放各地在WPF的特定点的控制对象(How to rotate, translate

2019-09-17 13:39发布

我有一个定制的控制,这与它里面一些细节的矩形,但它是一个矩形。

我有一个中心点(X,Y),我称之为“重心”,其中“代表”的地步。 这意味着,当我设置一个新的位置到目标,我想这点是在设定的位置。 当我旋转对象,我需要它围绕此点旋转。 当我缩放对象,点必须保持在之前设置的位置。 只有对象的大小必须改变。

例如,有问题的一个简单的图片,让我们说我有一个10X10平方。 余设置的重心在正方形的确切中心:(5,5)。 然后我设置的对象的位置(100,100)。 然后,广场将是:

(95,95),(105,95),(105,105),(95105),这意味着它的中心将是所希望的位置。

在情况下,我与扩展值2平方,新的4点的位置将是:

(90,90),(110,90),(110,110),(90110),这意味着它的中心将保持在期望的位置。

在情况下,我将其旋转45度,它会围绕其与位置中心:

(92.93,92.93),(107.07,92.93),(107.07,107.07),(92.93,107.07)

这怎么可能做到这一点,其中心完全可配置的,这一切转变为透明在WPF程序? 我只想设置缩放,位置,旋转角度和中心有它正确绘制。

谢谢!

Answer 1:

您可以设置相对的中心点变换对象的大小。 如果你想围绕对象的左上角旋转,该值是0, 0 。 要绕一个位置10%,过去的右下角,你会使用1.1, 1.1

该属性称为RenderTransformOrigin为RotationTranforms。 在Blend中,有一个在性能的“转换”组。 如果你展开它的的RenderTransform有一组选项卡。 第五届一种是中心点。

下面是一些例子XAML:

<TextBlock Text="TextBlock" RenderTransformOrigin="-0.5,-0.5" Background="#FFA1BBF9" Margin="50" Width="100" Height="100">
    <TextBlock.RenderTransform>
        <TransformGroup>
            <ScaleTransform ScaleX="2"/>
            <SkewTransform/>
            <RotateTransform Angle="30"/>
            <TranslateTransform/>
         </TransformGroup>
     </TextBlock.RenderTransform>
</TextBlock>


Answer 2:

**旋转原产任何控件**

// rotated object
      Rectangle r = new Rectangle();
                r.Fill = Brushes.Blue;
                r.Stroke = Brushes.Yellow;
                r.Width = 200;
                r.Height = 100;      



//rotate transform
 RotateTransform rt = new RotateTransform();

            r.RenderTransform = rt;

            //origin for object
            r.RenderTransformOrigin = new Point(.5,.5);

            DoubleAnimation anim3 = new DoubleAnimation(0, 360, TimeSpan.FromSeconds(.5));
            anim3.RepeatBehavior = RepeatBehavior.Forever;
           rt.BeginAnimation(RotateTransform.AngleProperty, anim3);
  grid1.Children.Add(r);


文章来源: How to rotate, translate and scale a control object around an specific point in WPF