public Transition(Element targetElement, string targetProperty, IValueBounds bounds, TransitionTiming timing, int delayMilliseconds = 0, ContinuationMode continuationMode = ContinuationMode.Restart) { this.targetElement = targetElement; this.targetProperty = targetProperty; this.valueBounds = bounds; this.timing = timing; this.delay = delayMilliseconds; this.continuationMode = continuationMode; }
public void Start() { if (state != State.Stopped) { Stop(); } state = State.Pending; cancellationToken = Window.SetTimeout(() => { if (state != State.Pending) { return; } state = State.Running; string currentValue = valueBounds.FormattedStartValue; TransitionTiming currentTiming = timing; if (continuationMode == ContinuationMode.ContinueValue || continuationMode == ContinuationMode.ContinueValueAndTime) { currentValue = WindowExtensions.GetComputedStyle(targetElement).GetPropertyValue(targetProperty); } if (continuationMode == ContinuationMode.ContinueValueAndTime) { double currentProgress = valueBounds.GetProgress(currentValue); double currentProgressTiming = timing.Timing.GetTiming(currentProgress); currentTiming = timing.AddDuration((int)(-currentProgressTiming * timing.Duration)); // also, a truncated timing curve is needed here; } targetElement.Style.GetTransitionDictionary().Clear(targetProperty); targetElement.Style[targetProperty] = currentValue; RunAsync(() => { if (state == State.Running) { targetElement.Style.GetTransitionDictionary().Set(targetProperty, currentTiming.ToString()); targetElement.Style[targetProperty] = valueBounds.FormattedEndValue; } }); Window.SetTimeout(() => { if (state == State.Running) { RaiseCompleted(); } }, currentTiming.Delay + currentTiming.Duration); }, delay); }
public MultiplePropertyTransition(Element targetElement, IEnumerable <string> targetProperties, IValueBounds bounds, TransitionTiming timing, int delayMilliseconds = 0, Transition.ContinuationMode continuationMode = Transition.ContinuationMode.Restart) { transition = new ParallelTransition(targetProperties.Select(targetProperty => new Transition(targetElement, targetProperty, bounds, timing, delayMilliseconds, continuationMode)).ToArray()); transition.Completed += (sender, e) => RaiseCompleted(); }