protected Storyboard ClonePlaceholderItems(AnimationPlaceholder placeholder, FrameworkElement destinationElement) { if (placeholder.Triggers.Count == 0) { return(null); } var orgTrigger = placeholder.Triggers[0] as EventTrigger; if (orgTrigger == null) { return(null); } var orgBeginStoryboard = orgTrigger.Actions[0] as BeginStoryboard; if (orgBeginStoryboard == null) { return(null); } var orgStoryboard = orgBeginStoryboard.Storyboard; destinationElement.RenderTransformOrigin = placeholder.RenderTransformOrigin; destinationElement.RenderTransform = placeholder.RenderTransform.Clone(); destinationElement.LayoutTransform = placeholder.LayoutTransform.Clone(); var storyboard = new Storyboard(); foreach (var ani in orgStoryboard.Children) { var newAnimation = ani.Clone(); storyboard.Children.Add(newAnimation); newAnimation.SetValue(Storyboard.TargetProperty, destinationElement); } var trigger = new EventTrigger(orgTrigger.RoutedEvent); trigger.Actions.Add(new BeginStoryboard() { Storyboard = storyboard }); destinationElement.Triggers.Add(trigger); this.OnStoryboardPrepared(storyboard); return(storyboard); }
internal static Storyboard ClonePlaceholderItems(AnimationPlaceholder placeholder, FrameworkElement destinationElement, out RoutedEvent routedEvent) { routedEvent = null; var orgTransformOrigin = placeholder.RenderTransformOrigin; var orgTransform = placeholder.RenderTransform; if (placeholder.Triggers.Count == 0) { return(null); } var orgTrigger = placeholder.Triggers[0] as EventTrigger; if (orgTrigger == null) { return(null); } routedEvent = orgTrigger.RoutedEvent; var orgBeginStoryboard = orgTrigger.Actions[0] as BeginStoryboard; if (orgBeginStoryboard == null) { return(null); } var orgStoryboard = orgBeginStoryboard.Storyboard; destinationElement.RenderTransformOrigin = placeholder.RenderTransformOrigin; var transformation = orgTransform.Clone(); destinationElement.RenderTransform = orgTransform.Clone(); var storyboard = new Storyboard(); foreach (var ani in orgStoryboard.Children) { storyboard.Children.Add(ani.Clone()); } Storyboard.SetTarget(storyboard, destinationElement); return(storyboard); }