如何在ViewModel

时间:2016-06-27 13:08:53

标签: wpf rotation resize

......我不会说英语......

我有问题。 我希望在使用8 ResizeThumb旋转后调整大小。(如PowerPoint) 但是当我应用 RotateTransform (orgin = 0.5)时,Resize方法很奇怪。

Item ViewModel
ViewModel具有这样的属性(X,Y,Angle,Width,Height)。

private double _X;
public double X 
{ 
    get 
    {
        return_X;
    }
    set
    {
        value = Math.Round(value);
        if(_X == value) { return; }
        _X = value;
        RaisePropertyChanged("X");
    }
}
... and Y, Angle, Height, Width.

我试着像这样绑定。

  • 角度绑定在 RotateTransform
  • X,Y绑定在 Canvas.Left / Top TranslateTransform

但这两种情况都很奇怪。

所以当我在旋转后计算X,Y时,我认为一起计算角度。

public void ResizeTopCenter(DragDeltaEventArgs e)
{
    Matrix m = Matrix.Identity;
    m.Rotate(Angle * Math.PI/180);
    Point rotated = m.Transform(new Point(e.HorizontalChanged, e.VerticalChange));

    // little bit different every direction.
    ViewModel.X += rotated.X;
    ViewModel.Y += rotated.Y;
    ViewModel.Height += rotated.Y;
}       

另一种方式

Canvas.SetTop(this.designerItem, Canvas.GetTop(this.designerItem) + (this.transformOrigin.Y * deltaVertical * (1 - Math.Cos(-this.angle))));
Canvas.SetLeft(this.designerItem, Canvas.GetLeft(this.designerItem) - deltaVertical * this.transformOrigin.Y * Math.Sin(-this.angle));

......如预期的那样奇怪。

我无法写完全源,因为我下班了。 已经八小时了,明天也在继续。

请帮帮我。

谢谢你。 我很抱歉读英语。

0 个答案:

没有答案