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); }