2017-06-27 7 views
0

私はいくつかの画像を持つキャンバスを持っています。私はマウスを右クリックすると、選択した画像が90度回転していることがわかりました。 それは最初の回転のために完全に動作します。 問題は、もう一度クリックすると再び90度回転しないことです。なぜキャンバス上のすべてのUI要素が回転しても、選択したものを回転しようとするだけです

私のコードはここにある:

sourceElt.MouseRightButtonUp += (sender, e) => 
      { 
       RotateTransform myRotateTransform = new RotateTransform(); 
       DragSourceBase advisorDraggable = GetDragSource(sender as DependencyObject); 
       if (advisorDraggable.IsDraggable(e.Source as UIElement) == false) return; 
       sourceElt = e.Source as UIElement; 
       sourceElt.RenderTransformOrigin = new Point(0.5, 0.5); 
       myRotateTransform.Angle = 90; 
       sourceElt.RenderTransform = myRotateTransform; 
       sourceElt.UpdateLayout(); 
       _isMouseDown = false; 
       ifDraggedAfterRotation = true; 
       _offsetPoint = new Point(0, 0); 
       Mouse.Capture(null); 
       _draggedElt = null; 
       e.Handled = true; 
      } 

私はこのように私のコードを変更する実行しようとしました以前の問題解決するために:

RotateTransform myRotateTransform = new RotateTransform(); //kept it outside rigth button click event 
       sourceElt.MouseRightButtonUp += (sender, e) => 
       { 

        DragSourceBase advisorDraggable = GetDragSource(sender as DependencyObject); 
        if (advisorDraggable.IsDraggable(e.Source as UIElement) == false) return; 
        sourceElt = e.Source as UIElement; 
        sourceElt.RenderTransformOrigin = new Point(0.5, 0.5); 
        myRotateTransform.Angle += 90; // made it += 
        sourceElt.RenderTransform = myRotateTransform; 
        sourceElt.UpdateLayout(); 
        _isMouseDown = false; 
        ifDraggedAfterRotation = true; 
        _offsetPoint = new Point(0, 0); 
        Mouse.Capture(null); 
        _draggedElt = null; 
        e.Handled = true; 
       } 

をそれは私の前の問題を解決しましたが、別の問題は、それが発言権をすることができます到着しました私は1つの画像を回転し、直ちに別の画像を回転させた直後に、以前に回転した画像を選択していなくても、現在選択されている画像を右クリックするだけで問題はありますが、選択された画像。どのようにのみキャンバス上で選択した画像を回転させる

**。**

+0

添付プロパティはキャンバスにありますか?いつイベントに登録しますか(1行目で+ =演算子)?あなたのイベントは、ただ1つではなく複数のハンドラを呼び出すようです。もっとコードを投稿できますか? –

答えて

1

あなたは、おそらく90度の既存RotateTransformのAngleプロパティをインクリメントします。要素のRenderTransformプロパティにまだRotateTransformが含まれていない場合は、作成して割り当てます。

var element = (UIElement)sender; 
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 += 90; 
+0

それは働いています。なぜ以前にはうまくいかなかったのか教えてください。なぜ現在の要素を回転させていたのか、現在の+現在のUI要素を回転させていたのです。 –

+0

現在の要素を回転させている間に、現在のUI要素と以前に回転したUI要素が回転していたのはなぜですか? –

+0

すべての要素に対して同じRotateTransformインスタンスを使用していたためです。 – Clemens

関連する問題