user2005510
user2005510

Reputation: 11

Button begins storyboard animation

** Edit Question * *

Storyboard s = (Storyboard)TryFindResource("kupmove");
s.Stop();

This doesnt stop the ongoing animation, how can i stop it ?


How can i begin the storyboard with a button click event in visual c# ?

Here is the code i am using to begin the storyboard :

    Storyboard s = (Storyboard)TryFindResource("kupmove");
    Storyboard.SetTargetName(s, "geometryModel3D");
    s.Begin();

The animation does not begin and i get the following error :

'Children' property value in the path '(0).(1)[2].(2)' points to immutable instance of 'System.Windows.Media.Media3D.Transform3DCollection'

Here is my xaml storyboard :

<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>

* EDIT *

Suggested solutions doesnt work, actually i dont have an error with the previous code which triggers the storyboard, it works but I think because there is already an animation which has been initiated with the following code, causes the exception. Tell me a way to stop it when it has already been running :

>    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;

I think i must stop this first stop this --> geometryModel3D.Transform = rotateTransform; Because the animation i want to trigger has already been running with this code. How can i stop this before re-starting my storyboard with its own parameters which are declared in xaml code.

Stopping the geometryModel3D.Transform with a second parameter null value with BeginAnimation command, didnt help. First exception still occurs.

I think the problem initiates here :

Storyboard s = (Storyboard)TryFindResource("kupmove");
s.Stop();

This command doesnt stop the ongoing animation. So there must be something wrong thats why s.Begin() doesnt already trigger.

Upvotes: 1

Views: 1588

Answers (2)

WannaCSharp
WannaCSharp

Reputation: 1898

use x:Name instead of x:Key and call the Begin() method on that storyboard instance.

Upvotes: 1

plast1K
plast1K

Reputation: 469

A moment ago, a gentleman posted an answer that I read that displayed:

"Try calling the storyboard by it's key, i.e., not using TryFindResource()"

Maybe you could try calling it with it's instantiated name, kupmove

I merely read this, and the user deleted his answer. Sorry if it doesn't help.

Also, as another user posted, above, use x:Name rather than key, to create a name for the storyboard, then call it using that initialized name.

Upvotes: 0

Related Questions