aymannblal
aymannblal

Reputation: 19

Rectangle rotate once at MouseRightButtonDown

I need your help with this issue i have been struggling for the past day. I want to rotate a rectangle at an angle of 30° everytime i press the rightClickButton.

It works fine when i click once on the rightClickButton.But when i want to right click again it doesnt rotate anymore.

It's the same behavior with MouseButtonEventHandler or without.

Can you tell me what's wrong with my fudging code

Thanks in advance.

   private void Rectangle_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
          {
                MouseButtonEventHandlerRightClick(sender, e);
          }
   private void MouseButtonEventHandlerRightClick(object sender, MouseButtonEventArgs e)
   {
        element = (Rectangle)sender;
     if (Mouse.RightButton == MouseButtonState.Pressed)
         {
                Console.WriteLine("has cliqued right");
                anc_width = element.Width;
                anc_height = element.Height;
                i += 1;
                Console.WriteLine("before transform of guantanamera");
               double angle = 30;
               RotateTransform rotateTransform2 = new RotateTransform(angle);
              rotateTransform2.CenterX = element.Width / 2;
              rotateTransform2.CenterY = element.Height / 2;
            // Console.WriteLine(element.Width / 2 + " toto "+ element.Height/2);
             element.RenderTransform = rotateTransform2;
            /* Canvas.SetLeft(element, Canvas.GetLeft(element)+40);
            Canvas.SetTop(element, Canvas.GetTop(element));*/
      }
   else
      {
         Console.WriteLine("Releasing Element");
         element = null;
       }
    }

Upvotes: 0

Views: 34

Answers (1)

Clemens
Clemens

Reputation: 128106

You are always setting the same angle of 30°, while you should actually add 30° to the current value of the Angle property of an already existing RotateTransform.

Besides that, it's also unnecessary to set the transform's center. Set the element's RenderTransformOrigin property instead.

var rotateTransform = element.RenderTransform as RotateTransform;

if (rotateTransform == null)
{
    rotateTransform = new RotateTransform();
    element.RenderTransform = rotateTransform;
    element.RenderTransformOrigin = new Point(0.5, 0.5);
}

rotateTransform.Angle += 30;

You may also consider setting the transform in advance in XAML:

<Rectangle RenderTransformOrigin="0.5,0.5" ...>
    <Rectangle.RenderTransform>
        <RotateTransform/>
    </Rectangle.RenderTransform>
</Rectangle>

Upvotes: 2

Related Questions