1

在我们的应用程序中,我们使用装饰器进行一些虚假的拖放。装饰器不跟随鼠标,而是在鼠标移动时设置为屏幕上的某些特定坐标。

double xPosLocation = (int)(dividerDistanceXAxis * virtualPosition) + YAxisData.SpacingLeft;
double yPosLocation = CalculateValueToYPosition(VirtualPriceOfVehicle);
DragAdorner.UpdatePosition(xPosLocation - offsetX, yPosLocation + offsetY);

到目前为止,这工作正常。但是使用这样的代码,装饰器会从一个位置跳到另一个位置。这是它应该如何工作的,但是当装饰器设置到一个新位置时,有一些平滑的移动过渡会很好。

可以做到吗?由于我看不到任何位置属性,我想不可能做一个双重动画或类似的东西。

4

1 回答 1

0

你必须使用一个DependencyProperty动画

public class DragAdorner
{
    public Point Position
    {
        get { return (Point)GetValue(PositionProperty); }
        set { SetValue(PositionProperty, value); }
    }

    // Using a DependencyProperty as the backing store for PositionProperty.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty PositionProperty =
        DependencyProperty.Register("Position", typeof(Point), typeof(DragAdorner), new UIPropertyMetadata(PositionChanged));

    private static void PositionChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        UpdatePosition(Position);
    }
}

然后你可以做这样的事情(未经测试)

double xPosLocation = (int)(dividerDistanceXAxis * virtualPosition) + YAxisData.SpacingLeft;
double yPosLocation = CalculateValueToYPosition(VirtualPriceOfVehicle);
Point newLocation = new Point(xPosLocation, yPosLocation);

PointAnimation myPointAnimation = new PointAnimation();
myPointAnimation.From = DragAdorner.Position;
myPointAnimation.To = newLocation;
myPointAnimation.Duration = new Duration(TimeSpan.FromSeconds(1));

Storyboard myStoryboard = new Storyboard();
myStoryboard.Children.Add(myPointAnimation);
Storyboard.SetTargetName(myPointAnimation, DragAdorner.Position);
myStoryboard.Begin();
于 2012-01-09T14:18:25.893 回答