I have a 3D cube that I am animating using a common storyboard. The animation code is in the selectionChanged event for the combined code and is INTENDED to make sure that any animation that still works will stop before the next one starts; but it doesnβt work like that!
I understand that this is rather dirty code, but I still do not understand why my storyboard does not respond to management, since I call .begin (this is true).
Can someone tell me why I can not stop the StoryBoard? I still get this quirky message 'System.Windows.Media.Animation Warning: 6 : Unable to perform action because the specified Storyboard was never applied to this object for interactive control.; Action='Stop';' 'System.Windows.Media.Animation Warning: 6 : Unable to perform action because the specified Storyboard was never applied to this object for interactive control.; Action='Stop';'
Storyboard sb = new Storyboard(); DoubleAnimation forward90 = new DoubleAnimation(0,90,TimeSpan.FromMilliseconds(2000)); DoubleAnimation back90 = new DoubleAnimation(0,-90, TimeSpan.FromMilliseconds(2000)); private void cbo_SelectionChanged(object sender, SelectionChangedEventArgs e) { forward90.BeginTime = TimeSpan.Zero; back90.BeginTime = TimeSpan.Zero; NameScope.SetNameScope(this, new NameScope()); RegisterName(this.Name, this); sb.Stop(this); sb.Remove(this); sb.Children.Clear(); sb.AccelerationRatio = 0; sb.DecelerationRatio = 1; sb.RepeatBehavior = RepeatBehavior.Forever; int i = cbo.SelectedIndex; Orientation o = (Orientation)i; ViewModel vm = this.DataContext as ViewModel; if(vm !=null)vm.Orient = o; switch (o) { case Orientation.Front0: break; case Orientation.Front90: sb.Children.Add(forward90); Storyboard.SetTarget(forward90, cube2); Storyboard.SetTargetProperty(forward90, new PropertyPath(CubeControl.CubeControl.XRotationProperty)); sb.Begin(this, true); break; case Orientation.Right0: sb.Children.Add(back90); Storyboard.SetTarget(back90, cube2); Storyboard.SetTargetProperty(back90, new PropertyPath(CubeControl.CubeControl.YRotationProperty)); sb.Begin(this, true); break; case Orientation.Right90: back90.BeginTime = TimeSpan.FromMilliseconds(2000); sb.Children.Add(forward90); sb.Children.Add(back90); Storyboard.SetTarget(back90, cube2); Storyboard.SetTarget(forward90, cube2); Storyboard.SetTargetProperty(forward90, new PropertyPath(CubeControl.CubeControl.YRotationProperty)); Storyboard.SetTargetProperty(back90, new PropertyPath(CubeControl.CubeControl.ZRotationProperty)); sb.Begin(this, true); break; case Orientation.Top0: sb.Children.Add(back90); Storyboard.SetTarget(back90, cube2); Storyboard.SetTargetProperty(back90, new PropertyPath(CubeControl.CubeControl.ZRotationProperty)); sb.Begin(this, true); break; case Orientation.Top90: back90.BeginTime = TimeSpan.FromMilliseconds(2000); sb.Children.Add(forward90); sb.Children.Add(back90); Storyboard.SetTarget(forward90, cube2); Storyboard.SetTarget(back90, cube2); Storyboard.SetTargetProperty(forward90, new PropertyPath(CubeControl.CubeControl.XRotationProperty)); Storyboard.SetTargetProperty(back90, new PropertyPath(CubeControl.CubeControl.ZRotationProperty)); sb.Begin(this, true); break; default: break; } } }
source share