2009-11-25 21 views
11

Szukałem sposobu na zmianę obrazu Image podczas tworzenia storyboardu, a dokładniej, zmiany właściwości Source obrazu, tak aby wskazywał na nowy zasób obrazu. Nie wydaje się być StringAnimationUsingKeyFrames i DiscreteStringKeyFrame ale to nie działa (o ile mogę powiedzieć), ponieważ właściwość Źródło obrazu jest typu ImageSourceZmiana obrazu podczas animacji za pomocą scenorysu

Mój obecny storyboard wygląda to

<Storyboard x:Key="TransitionImage"> 
    <DoubleAnimationUsingKeyFrames 
     BeginTime="00:00:00" 
     Storyboard.TargetName="image" 
     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"> 
     <SplineDoubleKeyFrame KeyTime="00:00:00.7000000" Value="0.2"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:01.5000000" Value="1"/> 
    </DoubleAnimationUsingKeyFrames> 
    <StringAnimationUsingKeyFrames 
     BeginTime="00:00:00" 
     Storyboard.TargetName="image" 
     Storyboard.TargetProperty="(Image.Source)"> 
     <!-- This does not work --> 
     <DiscreteStringKeyFrame KeyTime="00:00:00.7000000" Value="check_24.png"/> 
    </StringAnimationUsingKeyFrames> 
    <DoubleAnimationUsingKeyFrames 
     BeginTime="00:00:00" 
     Storyboard.TargetName="image" 
     Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"> 
     <SplineDoubleKeyFrame KeyTime="00:00:00.7000000" Value="0.2"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:01.5000000" Value="1"/> 
    </DoubleAnimationUsingKeyFrames> 
</Storyboard> 

a obraz

<Image x:Name="image" 
     Source="delete_24.png" 
     Width="32" Height="32" 
     Margin="8" 
     RenderTransformOrigin="0.5,0.5"> 
    <Image.RenderTransform> 
     <TransformGroup> 
      <ScaleTransform/> 
      <SkewTransform/> 
      <RotateTransform/> 
      <TranslateTransform/> 
     </TransformGroup> 
    </Image.RenderTransform> 
</Image> 

mogę zmienić Source obrazu jako część serii ujęć lub mam pecha?

Odpowiedz

31

OK, rozwiązałem to sam. Wygląda na to, że musisz korzystać z ObjectAnimationUsingKeyFrames i DiscreteObjectKeyFrame, jak pokazano poniżej:

<ObjectAnimationUsingKeyFrames 
    BeginTime="00:00:00" 
    Storyboard.TargetName="image" 
    Storyboard.TargetProperty="(Image.Source)"> 
    <DiscreteObjectKeyFrame KeyTime="00:00:00.7000000"> 
     <DiscreteObjectKeyFrame.Value> 
      <BitmapImage UriSource="check_24.png" /> 
     </DiscreteObjectKeyFrame.Value> 
    </DiscreteObjectKeyFrame> 
</ObjectAnimationUsingKeyFrames> 
Powiązane problemy