2015-10-15 64 views
0

我試圖在滾動滑塊時旋轉矩形 有2個步驟:單擊矩形 - 滾動滑塊。 如果我只繪製一個矩形,一切都可以。 但是,當我繪製2個矩形或更多並開始旋轉時,我的所有矩形都以相同的角度一起旋轉。 我不知道這件事。 任何人都可以幫助我嗎? 在此先感謝! 這裏是我的代碼:(我發現的代碼在這個頁面在另一篇文章中旋轉)WPF:旋轉帶滑塊的矩形

Shape _shape; 
    RotateTransform rt = new RotateTransform(); 
     private void MyCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs) 
     { 

         ///////////////////////////////////////////////////// 
         //for know which rectangle has been clicked 
         if (MyTransform_type == TRANSFORM_TYPE.ROTATE) 
         { 
          _shape = e.OriginalSource as Shape; 
          if (_shape != null) 
          { 
           _shape = (Shape)e.OriginalSource; 
          } 
         } 

       } 


     private void MyCanvas_MouseRightButtonUp(object sender, MouseButtonEventArgs e) 
       { 
        if (MyTransform_type != TRANSFORM_TYPE.NONE && MyTransform_type != TRANSFORM_TYPE.ROTATE) 
        { 
         if (_shape == null) 
          return; 
         //_shape.ReleaseMouseCapture(); 
         Cursor = Cursors.Arrow; 
        } 
       } 



     private void sldRotate_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
       { 
        if (_shape != null) 
        { 
         _shape.RenderTransform = rt; 
         _shape.RenderTransformOrigin = new Point(0.5, 0.5); 
         var da = new DoubleAnimation(rt.Angle, sldRotate.Value, new Duration(TimeSpan.FromSeconds(0.001))); 
         rt.BeginAnimation(RotateTransform.AngleProperty, da); 
         rt.Angle = sldRotate.Value; 
        } 


    } 
+0

請添加完整的代碼,例如你在哪裏設置「rt」? –

+0

「rt」位於我的代碼頂部:D ​​ – Duy

回答

0

你的錯誤是創建一個RotateTransform對象,並將其分配給不同的形狀。所以在點擊幾個矩形後,每個矩形都有相同的rotatetransform實例。如果您現在更改rotatetransform的值,則每個矩形都將旋轉...

爲了解決您應該更改sldRotate_ValueChanged方法。檢查當前形狀是否已經有了旋轉變形。如果沒有,那麼創建一個,如果是調整rotatetransform ...

此外,如果你有這樣一個小動畫的時候,你可以離開它:

private void sldRotate_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
{ 
    if (_shape != null) 
    { 
     var rt = new RotateTransform(); 
     rt.Angle = sldRotate.Value; 
     _shape.RenderTransform = rt; 
     _shape.RenderTransformOrigin = new Point(0.5, 0.5); 
    } 
} 
+0

真是一個很好的解釋!它的工作,謝謝你! – Duy

0

看起來你正在使用的相同的RotateTransform爲所有矩形命名爲「rt」。該simpliest解決方案將是:

private void MyCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs) 
    {       
     if (MyTransform_type == TRANSFORM_TYPE.ROTATE) 
     { 
      _shape = e.OriginalSource as Shape; 

      //creating new RotateTransform 
      rt=new RotateTransform(); 

      if (_shape != null) 
      { 
       _shape = (Shape)e.OriginalSource; 
      } 
     } 
    } 

也是你能後

_shape = e.OriginalSource as Shape; 

,而不是每次都做它做

_shape.RenderTransform = rt; 
在MyCanvas_MouseRightButtonDown

,當sldRotate_ValueChanged執行,以避免不必要的作業。

+0

這非常有幫助,謝謝! – Duy