6

我有一个自定义构建的控件,它是一个矩形,里面有一些细节,但它是一个矩形。

我有一个中心点 (X,Y),我称之为“重心”,它“代表”该点。这意味着当我为对象设置新位置时,我希望该点位于设置位置。当我旋转对象时,我需要它围绕这个点旋转。并且当我缩放对象时,该点必须保持在之前设置的位置。只有对象的大小必须改变。

例如,为了简单地了解问题,假设我有一个 10X10 的正方形。我将重心设置在正方形的确切中心:(5,5)。然后我将对象位置设置为 (100, 100)。然后,广场将在:

(95,95), (105,95), (105,105), (95,105),这意味着它的中心将在所需的位置。

如果我用值 2 缩放正方形,新的 4 点位置将是:

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

如果我将它旋转 45 度,它将围绕其中心旋转,位置为:

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

怎么可能做到这一点,它的中心是完全可配置的,并且所有这些转换对于 WPF 中的程序都是透明的?我只想设置比例、位置、旋转角度和中心以使其正确绘制。

谢谢!

4

2 回答 2

11

您可以相对于对象的大小设置变换的中心点。如果要围绕对象的左上角旋转,则值为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>
于 2012-05-29T00:06:54.623 回答
3

** 旋转原点上的任何控件**

// 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);
于 2013-07-09T16:43:04.100 回答