private void SendToLocation(DragablzItem dragablzItem, double location) { double activeTarget; if (Math.Abs(_getLocation(dragablzItem) - location) < 1.0 || _activeStoryboardTargetLocations.TryGetValue(dragablzItem, out activeTarget) && Math.Abs(activeTarget - location) < 1.0) { return; } _activeStoryboardTargetLocations[dragablzItem] = location; var storyboard = new Storyboard {FillBehavior = FillBehavior.Stop}; storyboard.WhenComplete(sb => { _setLocation(dragablzItem, location); sb.Remove(dragablzItem); _activeStoryboardTargetLocations.Remove(dragablzItem); }); var timeline = new DoubleAnimationUsingKeyFrames(); timeline.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath(_canvasDependencyProperty)); timeline.KeyFrames.Add( new EasingDoubleKeyFrame(location, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(200))) { EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut } }); storyboard.Children.Add(timeline); storyboard.Begin(dragablzItem, true); }