** 编辑问题 * *
Storyboard s = (Storyboard)TryFindResource("kupmove"); s.Stop();
这不会停止正在进行的动画,我该如何停止它?
如何在 Visual c# 中使用按钮单击事件开始情节提要?
这是我用来开始故事板的代码:
    Storyboard s = (Storyboard)TryFindResource("kupmove");
    Storyboard.SetTargetName(s, "geometryModel3D");
    s.Begin();
动画没有开始,我收到以下错误:
'Children' property value in the path '(0).(1)[2].(2)' points to immutable instance of 'System.Windows.Media.Media3D.Transform3DCollection'
这是我的 xaml 故事板:
<Storyboard x:Key="kupmove" 
            RepeatBehavior="Forever"
            AutoReverse="True">
  <Rotation3DAnimationUsingKeyFrames Storyboard.TargetProperty="(Model3D.Transform).(Transform3DGroup.Children)[2].(RotateTransform3D.Rotation)"
                                     Storyboard.TargetName="geometryModel3D">
    <EasingRotation3DKeyFrame KeyTime="0">
      <EasingRotation3DKeyFrame.EasingFunction>
        <CubicEase EasingMode="EaseInOut" />
      </EasingRotation3DKeyFrame.EasingFunction>
      <EasingRotation3DKeyFrame.Value>
        <AxisAngleRotation3D Axis="0,1,0"
                             Angle="0" />
      </EasingRotation3DKeyFrame.Value>
    </EasingRotation3DKeyFrame>
    <EasingRotation3DKeyFrame KeyTime="0:0:1">
      <EasingRotation3DKeyFrame.EasingFunction>
        <CubicEase EasingMode="EaseInOut" />
      </EasingRotation3DKeyFrame.EasingFunction>
      <EasingRotation3DKeyFrame.Value>
        <AxisAngleRotation3D Axis="0,1,0"
                             Angle="179" />
      </EasingRotation3DKeyFrame.Value>
    </EasingRotation3DKeyFrame>
    <EasingRotation3DKeyFrame KeyTime="0:0:2">
      <EasingRotation3DKeyFrame.EasingFunction>
        <CubicEase EasingMode="EaseInOut" />
      </EasingRotation3DKeyFrame.EasingFunction>
      <EasingRotation3DKeyFrame.Value>
        <AxisAngleRotation3D Axis="0,-1,0"
                             Angle="1" />
      </EasingRotation3DKeyFrame.Value>
    </EasingRotation3DKeyFrame>
    <EasingRotation3DKeyFrame KeyTime="0:0:3">
      <EasingRotation3DKeyFrame.EasingFunction>
        <CubicEase EasingMode="EaseInOut" />
      </EasingRotation3DKeyFrame.EasingFunction>
      <EasingRotation3DKeyFrame.Value>
        <AxisAngleRotation3D Axis="0.009,-0.014,1"
                             Angle="90.005" />
      </EasingRotation3DKeyFrame.Value>
    </EasingRotation3DKeyFrame>
  </Rotation3DAnimationUsingKeyFrames>
  <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Model3D.Transform).(Transform3DGroup.Children)[4].(TranslateTransform3D.OffsetX)"
                                 Storyboard.TargetName="geometryModel3D">
    <EasingDoubleKeyFrame KeyTime="0:0:2"
                          Value="0">
      <EasingDoubleKeyFrame.EasingFunction>
        <CubicEase EasingMode="EaseInOut" />
      </EasingDoubleKeyFrame.EasingFunction>
    </EasingDoubleKeyFrame>
    <EasingDoubleKeyFrame KeyTime="0:0:3"
                          Value="0">
      <EasingDoubleKeyFrame.EasingFunction>
        <CubicEase EasingMode="EaseInOut" />
      </EasingDoubleKeyFrame.EasingFunction>
    </EasingDoubleKeyFrame>
  </DoubleAnimationUsingKeyFrames>
</Storyboard>
* 编辑 *
建议的解决方案不起作用,实际上我对触发情节提要的先前代码没有错误,它可以工作,但我认为因为已经有一个使用以下代码启动的动画,导致异常。告诉我一种在它已经运行时停止它的方法:
>    DoubleAnimation myAnimation = new DoubleAnimation();
>    myAnimation.From = 1;
>    myAnimation.To = 361;
>    myAnimation.Duration = new >Duration(TimeSpan.FromMilliseconds(1000));
>    myAnimation.RepeatBehavior = RepeatBehavior.Forever;
>    rotateTransform.Rotation.BeginAnimation(AxisAngleRotation3D.AngleProperty, myAnimation);
>    geometryModel3D.Transform = rotateTransform;
我想我必须先停止这个 -> geometryModel3D.Transform = rotateTransform; 因为我要触发的动画已经使用此代码运行。在使用 xaml 代码中声明的自己的参数重新启动我的故事板之前,我如何才能停止此操作。
使用 BeginAnimation 命令使用第二个参数空值停止 geometryModel3D.Transform,没有帮助。第一个异常仍然发生。
我认为问题从这里开始:
Storyboard s = (Storyboard)TryFindResource("kupmove");
s.Stop();
此命令不会停止正在进行的动画。所以一定有什么问题,这就是为什么 s.Begin() 还没有触发。