【问题标题】:Rectangle rotate once at MouseRightButtonDown矩形在 MouseRightButtonDown 处旋转一次
【发布时间】:2019-12-05 11:54:10
【问题描述】:

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

当我单击一次 rightClickButton 时它工作正常。但是当我想再次右键单击时它不再旋转了。

不管有没有 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;
       }
    }

【问题讨论】:

    标签: c# wpf rotation rectangles


    【解决方案1】:

    您始终设置相同的 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>
    

    【讨论】:

    • 感谢它在我每次点击时增加角度时起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    相关资源
    最近更新 更多