矩形在 MouseRightButtonDown 处旋转一次

Rectangle rotate once at MouseRightButtonDown

我需要你的帮助来解决我过去一天一直在努力解决的这个问题。我想在每次按下 rightClickButton 时将一个矩形旋转 30°。

当我在 rightClickButton.But 上单击一次时它工作正常,当我想再次右键单击时它不再旋转了。

无论是否使用 MouseButtonEventHandler,其行为都是相同的。

你能告诉我我的伪造代码有什么问题吗

提前致谢。

   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;
       }
    }

您总是设置相同的角度 30°,而实际上您应该将 30° 添加到现有 RotateTransform 的 Angle 属性 的当前值。

除此之外,也不需要设置变换的中心。改为设置元素的 RenderTransformOrigin 属性。

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;

您也可以考虑在XAML中提前设置转换:

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