Анимация WPF Drag Adorner движение - PullRequest
1 голос
/ 29 апреля 2011

в нашем приложении мы используем рекламное объявление для некоторых поддельных перетаскивания. При наведении мышки у рекламщика нет следа за мышью, но для него заданы определенные координаты на экране.

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

Пока все работает отлично. Но с таким кодом, рекламодатель прыгает с одного места на другое. Вот как это должно было сработать, но было бы неплохо иметь плавные переходы движения, когда украшатель устанавливает новую позицию.

Можно ли это сделать? Поскольку я не вижу свойства позиции, я думаю, что невозможно выполнить двойную анимацию или что-то в этом роде.

1 Ответ

0 голосов
/ 09 января 2012

Вы должны использовать 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();
...