示例#1
0
        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;
            }
        }
示例#2
0
        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;
                }
            }
        }