【问题标题】:Why all UI elements on the canvas gets rotated even i just try to rotate selected one为什么即使我只是尝试旋转选定的一个,画布上的所有 UI 元素也会旋转
【发布时间】:2017-06-27 06:22:59
【问题描述】:

我有一个有几个图像的画布。我已经创建了附加属性,当我在鼠标上单击鼠标右键时,所选图像会旋转 90 度。 它非常适合第一次旋转。 问题是当我再次单击时,它不再旋转 90 度。

我的代码在这里:

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

它解决了我之前的问题,但另一个问题来了,可以说我旋转了一个图像,然后在我旋转另一个图像之后,问题是即使我没有选择以前旋转的图像,我只需右键单击当前选择的图像但它会旋转图像,所有先前选择的图像和当前选择的图像。

** 如何仅在画布上旋转选定的图像。**

【问题讨论】:

  • 附加属性在画布上?您何时订阅该事件(第一行中的 += 运算符)?看起来您的事件正在调用多个处理程序,而不仅仅是一个。你能发布更多代码吗?

标签: .net wpf rotation rotatetransform


【解决方案1】:

您可能希望将现有 RotateTransform 的 Angle 属性增加 90 度。如果元素的 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;

【讨论】:

  • Et voila that works.. 你能告诉我为什么它以前不工作吗?为什么我只是在旋转当前元素时它在旋转当前 + revious UI 元素。
  • 为什么它在旋转当前和以前旋转的 UI 元素,而我只是在旋转当前元素?
  • 因为您对所有元素使用相同的 RotateTransform 实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-02
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 2014-04-24
相关资源
最近更新 更多