private void Engage(Point point, EngagementArea engagementArea)
        {
            CurrentForce             = 0.0;
            currentInteractionStatus = InteractionStatus.Engaged;
            if (AssociatedObject == null)
            {
                return;
            }
            InitialTime         = DateTime.Now;
            InitialPosition     = point;
            PreviousPosition    = InitialPosition;
            InitialOffset       = AssociatedObject.ScrollPosition;
            this.engagementArea = engagementArea;

            //var preEngagedItem = GetPreEngagementCarouselItem(point, engagementArea);
            //this.preEngagedItem = preEngagedItem;
            //var direction = engagementArea == EngagementArea.Left ? 1 : -1;
            //var finalValue = preEngagedItem.ScrollPosition + PreEngagementScrollPositionDelta * direction;
            //PreEngagementAnimationHelper.StartAnimation(preEngagedItem.ScrollPosition, finalValue);
        }
        private CarouselItem GetPreEngagementCarouselItem(Point point, EngagementArea engagementArea)
        {
            var direction = engagementArea == EngagementArea.Left ? -1 : 1;
            var items     = this.AssociatedObject.FindVisualChild <Canvas>().Children;
            //System.Diagnostics.Debug.WriteLine("PRE ENGAGEMENT Scroll Position = " + AssociatedObject.ScrollPosition + " Engagement " + engagementArea);
            //foreach (CarouselItem item in items)
            //{
            //    System.Diagnostics.Debug.WriteLine(String.Format("{0} - {1}", item.DataContext, item.ScrollPosition));
            //}
            var nextItem = (from CarouselItem item in items
                            where Math.Abs((SelectedItemScrollPosition + AssociatedObject.ItemSeparation * direction) - item.ScrollPosition) < 0.001
                            select item).ToArray().FirstOrDefault();

            if (nextItem == null)
            {
                switch (engagementArea)
                {
                case EngagementArea.Left:
                {
                    nextItem = (from CarouselItem item in items
                                orderby item.ScrollPosition descending
                                select item).ToArray().FirstOrDefault();
                }
                break;

                case EngagementArea.Right:
                {
                    nextItem = (from CarouselItem item in items
                                orderby item.ScrollPosition ascending
                                select item).ToArray().FirstOrDefault();
                }
                break;

                default:
                    break;
                }
            }
            return(nextItem);
        }