private void CheckForOverlap()
        {
            var allClips      = AnimationTimeline.AnimationTracks.SelectMany(track => track.TrackClips);
            var allDirtyClips = allClips.Where(clip => clip.Dirty);
            var anyDirty      = allDirtyClips.Count() > 0;

            if (!anyDirty)
            {
                return;
            }

            foreach (var clip in allClips)
            {
                clip.CrossFade = false;
            }

            foreach (var clip in allClips)
            {
                var min = clip.StartTime;
                var max = clip.EndTime;

                // Get all the clips that the start of this clip overlaps
                var overlappedClips = allClips.Where(evaluationClip => evaluationClip != clip && (min <evaluationClip.EndTime && min> evaluationClip.StartTime) && max > evaluationClip.EndTime);
                foreach (var overlapped in overlappedClips)
                {
                    var overlappingTime = overlapped.EndTime - clip.StartTime;

                    clip.TransitionDuration = overlappingTime;
                    clip.CrossFade          = true;
                }
            }

            foreach (var clip in allDirtyClips)
            {
                clip.Dirty = false;
            }

            AnimationTimeline.Process(AnimationTimeline.Sequence.RunningTime, AnimationTimeline.Sequence.PlaybackRate);
        }