public TimelinePausePoint(TimelinePausePointsCollection owner, TimeSpan relativeTime)
            : base(relativeTime)
        {
            DebugHelper.AssertUIThread();

            if (owner == null)
            {
                throw new ArgumentNullException("owner");
            }

            this.owner = owner;
            this.marker = null;
        }
        public TimelinePausePoint(TimelinePausePointsCollection owner, TimeSpan relativeTime, TimelineMarker marker)
            : base(relativeTime)
        {
            DebugHelper.AssertUIThread();

            if (owner == null)
            {
                throw new ArgumentNullException("owner");
            }

            if (marker == null)
            {
                throw new ArgumentNullException("marker");
            }

            this.owner = owner;
            this.marker = marker;

            this.marker.PropertyChanged += Marker_PropertyChanged;
        }
        public TimelinePausePoint CreateCoupledPausePoint(TimelinePausePointsCollection pausePoints)
        {
            DebugHelper.AssertUIThread();
            Debug.Assert(this.owner != null);

            if (pausePoints == null)
            {
                throw new ArgumentNullException("pausePoints");
            }

            if (this.pausePoint != null)
            {
                throw new InvalidOperationException("already has coupled pause point");
            }

            this.pausePoint = pausePoints.AddAt(this);

            return this.pausePoint;
        }