private void TargetCenterPropertyChanged(Location targetCenter) { if (!internalPropertyChange) { AdjustCenterProperty(TargetCenterProperty, ref targetCenter); if (!targetCenter.Equals(Center)) { if (centerAnimation != null) { centerAnimation.Completed -= CenterAnimationCompleted; } // animate private CenterPoint property by PointAnimation centerAnimation = new PointAnimation { From = MapProjection.LocationToPoint(Center), To = MapProjection.LocationToPoint(new Location( targetCenter.Latitude, Location.NearestLongitude(targetCenter.Longitude, Center.Longitude))), Duration = AnimationDuration, EasingFunction = AnimationEasingFunction }; centerAnimation.Completed += CenterAnimationCompleted; this.BeginAnimation(CenterPointProperty, centerAnimation); } } }
private void CenterAnimationCompleted(object sender, object e) { if (centerAnimation != null) { centerAnimation.Completed -= CenterAnimationCompleted; centerAnimation = null; InternalSetValue(CenterProperty, TargetCenter); InternalSetValue(CenterPointProperty, MapProjection.LocationToPoint(TargetCenter)); UpdateTransform(); } }
private void CenterPropertyChanged(Location center) { if (!internalPropertyChange) { AdjustCenterProperty(CenterProperty, ref center); UpdateTransform(); if (centerAnimation == null) { InternalSetValue(TargetCenterProperty, center); InternalSetValue(CenterPointProperty, MapProjection.LocationToPoint(center)); } } }