2011-04-01 29 views
6

Bir WPF projesinde bir balık resmim var (arkada VB.net kodu) ve iki dönüşüm kullanarak ileri geri yüzmeyi denemeye çalışıyorum.GroupTransform'da Trouble Animasyon Dönüşümleri

Bazı nedenlerden ötürü, ScaleTransformu yalnızca canlandırıyorsam (yalnızca ScaleTransform ile ve TransformGroup olmadan), animasyon iyi çalışıyorsa, TranslateTransform animasyonu çalışmıyor. Ayrıca, ScaleTransform TransformGroup içinde çalışırken çalışmaz.

Kullandığım kod İşte. Neyi yanlış yapıyorum?

<Image Height="90" HorizontalAlignment="Left" Name="Fish1" Stretch="Fill" VerticalAlignment="Top" Width="260" Source="/VBP-WORD4WORD;component/Images/IMG-FISH1.png" Canvas.Left="24" Canvas.Top="67" Margin="-28,70,0,0"> 
    <Image.RenderTransform> 
     <TransformGroup> 
      <ScaleTransform ScaleX="1"/> 
      <TranslateTransform X="0"/> 
     </TransformGroup> 
    </Image.RenderTransform> 
    <Image.Triggers> 
     <EventTrigger RoutedEvent="Image.Loaded"> 
      <EventTrigger.Actions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimationUsingKeyFrames Duration="0:0:30" Storyboard.TargetProperty="RenderTransform.(TransformGroup.TranslateTransform.X)" RepeatBehavior="Forever"> 
          <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0"/> 
          <LinearDoubleKeyFrame KeyTime="0:0:14.9" Value="407"/> 
          <LinearDoubleKeyFrame KeyTime="0:0:15" Value="680"/> 
          <LinearDoubleKeyFrame KeyTime="0:0:29.9" Value="265"/> 
          <LinearDoubleKeyFrame KeyTime="0:0:30" Value="0"/> 
         </DoubleAnimationUsingKeyFrames> 
         <DoubleAnimationUsingKeyFrames Duration="0:0:30" Storyboard.TargetProperty="RenderTransform.(TransformGroup.ScaleTransform.ScaleX)" RepeatBehavior="Forever"> 
          <LinearDoubleKeyFrame KeyTime="0:0:14.9" Value="1"/> 
          <LinearDoubleKeyFrame KeyTime="0:0:15" Value="-1"/> 
          <LinearDoubleKeyFrame KeyTime="0:0:29.9" Value="-1"/> 
          <LinearDoubleKeyFrame KeyTime="0:0:30" Value="1"/> 
         </DoubleAnimationUsingKeyFrames> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger.Actions> 
     </EventTrigger> 
    </Image.Triggers> 
</Image> 

cevap

14

olanlar mülkiyet yolları tüm yanlış, ama ben sadece sadece Storyboard.TargetName kullanarak bu yolları kullanarak bütün sorun kaçınmak için oy vereceğini; Bu çalışır:

<!-- ... --> 
<TransformGroup> 
    <ScaleTransform x:Name="scaleTransform" ScaleX="1"/> 
    <TranslateTransform x:Name="translateTransform" X="0"/> 
</TransformGroup> 
    <!-- ... --> 
    <Storyboard> 
     <DoubleAnimationUsingKeyFrames Duration="0:0:30" 
             Storyboard.TargetProperty="ScaleX" 
             Storyboard.TargetName="scaleTransform" 
             RepeatBehavior="Forever"> 
      <LinearDoubleKeyFrame KeyTime="0:0:14.9" Value="1"/> 
      <LinearDoubleKeyFrame KeyTime="0:0:15" Value="-1"/> 
      <LinearDoubleKeyFrame KeyTime="0:0:29.9" Value="-1"/> 
      <LinearDoubleKeyFrame KeyTime="0:0:30" Value="1"/> 
     </DoubleAnimationUsingKeyFrames> 
     <DoubleAnimationUsingKeyFrames Duration="0:0:30" 
             Storyboard.TargetProperty="X" 
             Storyboard.TargetName="translateTransform" 
             RepeatBehavior="Forever"> 
      <LinearDoubleKeyFrame KeyTime="0:0:0" Value="0"/> 
      <LinearDoubleKeyFrame KeyTime="0:0:14.9" Value="407"/> 
      <LinearDoubleKeyFrame KeyTime="0:0:15" Value="680"/> 
      <LinearDoubleKeyFrame KeyTime="0:0:29.9" Value="265"/> 
      <LinearDoubleKeyFrame KeyTime="0:0:30" Value="0"/> 
     </DoubleAnimationUsingKeyFrames> 
    </Storyboard> 

ben sadece şimdi öğrendim olarak gerçekten sadece bu doğru yolları olacağını Storyboard.TargetProperty kullanarak bunu yapmak isterseniz:

Eğer düşünürsen mükemmel mantıklı
Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
Storyboard.TargetProperty="RenderTransform.Children[1].X" 

o.

+1

İlk yöntem çalışmıyor. İkincisi. – CodeMouse92

+1

Benim için çalıştı, farklı bir şey yapmış olmalısınız, örneğin 'x: Name' yerine 'Name' kullanılmalı ya da özellik yolunu doğru ayarlamamış olmalısınız (iki animasyonun sırasını sırayla aynı olacak şekilde değiştirdim Bu arada TransformGroup) –

+0

Ah, x: Sebebi olurdu. Her iki şekilde de, şimdi çalışıyor. İki harika çözüm sağlamak için oylama. : 3 – CodeMouse92