Reputation: 935
I tried to rotate a rectangle when mouse is moving.
My code:
private int i = 0;
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
RotateTransform rotation = new RotateTransform();
rotation.Angle = i;
rotation.CenterX = Canvas.GetLeft(rect) + rect.Width/2;
rotation.CenterY = Canvas.GetTop(rect) + rect.Height/2;
rect.LayoutTransform = rotation;
i++;
}
I want to make rotation by center of my rectangle, but it making it in another way. This lines:
rotation.CenterX = Canvas.GetLeft(rect) + rect.Width/2;
rotation.CenterY = Canvas.GetTop(rect) + rect.Height/2;
dont change anything at all. Do you know why ?
I found a solution in another post in this forum, so my solution for this is:
double left = Canvas.GetLeft(rect);
double top = Canvas.GetTop(rect);
Canvas.SetLeft(rect, 0);
Canvas.SetTop(rect, 0);
RotateTransform rotation = new RotateTransform();
rotation.Angle = i;
rotation.CenterX = rect.Width/2;
rotation.CenterY = rect.Height/2;
rect.RenderTransform = rotation;
Canvas.SetLeft(rect, left);
Canvas.SetTop(rect, top);
i++;
Upvotes: 3
Views: 8463
Reputation: 128106
I guess what you actually want is a RenderTransform with a RenderTransformOrigin at the center of the Rectangle:
<Rectangle Fill="Orange" Width="100" Height="100" RenderTransformOrigin="0.5,0.5">
<Rectangle.RenderTransform>
<RotateTransform x:Name="rotateTransform"/>
</Rectangle.RenderTransform>
</Rectangle>
Write the MouseMove handler like this:
double angle = 0;
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
rotateTransform.Angle = angle; // yes, Angle is a double
angle += 1;
}
Upvotes: 6