private void ResizeThumb_DragStarted(object sender, DragStartedEventArgs e) { _imageControl = DataContext as ImageControl; if (_imageControl == null) { return; } _isResize = false; _isLockAspect = _imageControl.IsLockAspect; _oldWitdh = _imageControl.Width; _oldHeight = _imageControl.Height; _scaleTransform = _imageControl.GetTransform <ScaleTransform>(); _oldScaleX = _scaleTransform.ScaleX; _oldScaleY = _scaleTransform.ScaleY; if (VerticalAlignment == VerticalAlignment.Top && HorizontalAlignment == HorizontalAlignment.Stretch) { _thumbFlag = ThumbFlag.TopCenter; } else if (VerticalAlignment == VerticalAlignment.Stretch && HorizontalAlignment == HorizontalAlignment.Left) { _thumbFlag = ThumbFlag.LeftCenter; } else if (VerticalAlignment == VerticalAlignment.Stretch && HorizontalAlignment == HorizontalAlignment.Right) { _thumbFlag = ThumbFlag.RightCenter; } else if (VerticalAlignment == VerticalAlignment.Bottom && HorizontalAlignment == HorizontalAlignment.Stretch) { _thumbFlag = ThumbFlag.BottomCenter; } else if (VerticalAlignment == VerticalAlignment.Top && HorizontalAlignment == HorizontalAlignment.Left) { _thumbFlag = ThumbFlag.TopLeft; } else if (VerticalAlignment == VerticalAlignment.Top && HorizontalAlignment == HorizontalAlignment.Right) { _thumbFlag = ThumbFlag.TopRight; } else if (VerticalAlignment == VerticalAlignment.Bottom && HorizontalAlignment == HorizontalAlignment.Left) { _thumbFlag = ThumbFlag.BottomLeft; } else if (VerticalAlignment == VerticalAlignment.Bottom && HorizontalAlignment == HorizontalAlignment.Right) { _thumbFlag = ThumbFlag.BottomRight; } }
public DragResizeAction(FrameworkElement element, double scaleHorizontal, double scaleVertical, bool turnHorizontal, bool turnVerticale, ThumbFlag thumbFlag) { _element = element; _translateTransform = element.GetTransform <TranslateTransform>(); _scaleTransform = element.GetTransform <ScaleTransform>(); _oldWitdh = _width = element.Width; _oldHeight = _height = element.Height; _oldTranslateX = _translateX = _translateTransform.X; _oldTranslateY = _translateY = _translateTransform.Y; _oldScaleX = _scaleX = _scaleTransform.ScaleX; _oldScaleY = _scaleY = _scaleTransform.ScaleY; var radian = element.GetTransform <RotateTransform>().Angle *Math.PI / 180; var deltaVertical = _height * (1 - scaleVertical); var deltaHorizontal = _width * (1 - scaleHorizontal); if (thumbFlag == ThumbFlag.TopLeft || thumbFlag == ThumbFlag.TopCenter || thumbFlag == ThumbFlag.TopRight) { _translateY += deltaVertical * Math.Cos(-radian) * _scaleY; _translateX += deltaVertical * Math.Sin(-radian) * _scaleY; } _height = _height * scaleVertical; if (thumbFlag == ThumbFlag.TopLeft || thumbFlag == ThumbFlag.LeftCenter || thumbFlag == ThumbFlag.BottomLeft) { _translateY += deltaHorizontal * Math.Sin(radian) * _scaleX; _translateX += deltaHorizontal * Math.Cos(radian) * _scaleX; } _width = _width * scaleHorizontal; if (turnVerticale) { _scaleY = -_scaleY; if (thumbFlag == ThumbFlag.TopLeft || thumbFlag == ThumbFlag.TopCenter || thumbFlag == ThumbFlag.TopRight) { _translateY -= 2 * _height * Math.Cos(-radian) * _scaleY; _translateX -= 2 * _height * Math.Sin(-radian) * _scaleY; } } if (turnHorizontal) { _scaleX = -_scaleX; if (thumbFlag == ThumbFlag.TopLeft || thumbFlag == ThumbFlag.LeftCenter || thumbFlag == ThumbFlag.BottomLeft) { _translateY -= 2 * _width * Math.Sin(radian) * _scaleX; _translateX -= 2 * _width * Math.Cos(radian) * _scaleX; } } }