WPF - Cannot Stop Animated StoryBoard, IsControllable Not Working?

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; } } } 
+4
source share
1 answer

I believe that you need to go to cbo, not the begin method.

this refers to the current class (I think your window class), while this is a change in cbo to control the animation.

+3
source

All Articles