/// <summary> /// Starts the specified <paramref name="board"/> in the context of the specified /// <paramref name="element"/>. /// </summary> /// <remarks> /// Depending on the parameter <paramref name="handoffBehavior"/>, the new storyboard will /// be started when the last other storyboard, which occupies a conflicting property, /// has finished. /// </remarks> /// <param name="board">The storyboard to start.</param> /// <param name="element">Context element which will be used as /// <see cref="TimelineContext.VisualParent"/> for the new <paramref name="board"/>.</param> /// <param name="handoffBehavior">Controls how the new storyboard animation will be /// attached to already running animations, if there are conflicting properties animated /// by an already running anmiation an by the new <paramref name="board"/>.</param> public void StartStoryboard(Storyboard board, UIElement element, HandoffBehavior handoffBehavior) { lock (_syncObject) { AnimationContext context = new AnimationContext { Timeline = board, TimelineContext = board.CreateTimelineContext(element) }; IDictionary<IDataDescriptor, object> conflictingProperties; ICollection<AnimationContext> conflictingAnimations; FindConflicts(context, out conflictingAnimations, out conflictingProperties); ExecuteHandoff(context, conflictingAnimations, handoffBehavior); try { board.Setup(context.TimelineContext, conflictingProperties); _scheduledAnimations.Add(context); board.Start(context.TimelineContext, SkinContext.SystemTickCount); } catch (Exception ex) { ServiceRegistration.Get<ILogger>().Error("Animator: Error initializing StoryBoard", ex); } // No animation here - has to be done in the Animate method } }
/// <summary> /// Starts the specified <paramref name="board"/> in the context of the specified /// <paramref name="element"/>. /// </summary> /// <remarks> /// Depending on the parameter <paramref name="handoffBehavior"/>, the new storyboard will /// be started when the last other storyboard, which occupies a conflicting property, /// has finished. /// </remarks> /// <param name="board">The storyboard to start.</param> /// <param name="element">Context element which will be used as /// <see cref="TimelineContext.VisualParent"/> for the new <paramref name="board"/>.</param> /// <param name="handoffBehavior">Controls how the new storyboard animation will be /// attached to already running animations, if there are conflicting properties animated /// by an already running anmiation an by the new <paramref name="board"/>.</param> public void StartStoryboard(Storyboard board, UIElement element, HandoffBehavior handoffBehavior) { lock (_syncObject) { AnimationContext context = new AnimationContext { Timeline = board, TimelineContext = board.CreateTimelineContext(element) }; IDictionary<IDataDescriptor, object> conflictingProperties; ICollection<AnimationContext> conflictingAnimations; FindConflicts(context, out conflictingAnimations, out conflictingProperties); ExecuteHandoff(context, conflictingAnimations, handoffBehavior); board.Setup(context.TimelineContext, conflictingProperties); _scheduledAnimations.Add(context); board.Start(context.TimelineContext, SkinContext.SystemTickCount); // No animation here - has to be done in the Animate method } }