2010-06-02 4 views
6

¿Por qué Storyboard.SetTargetName funciona pero Storyboard.SetTarget no? Aquí xaml -Storyboard.SetTarget vs Storyboard.SetTargetName

<Grid Grid.Row="0" ClipToBounds="True"> 
     <X:SmartContentControl x:Name="smartContent" Content="{Binding Path=MainContent}" ContentChanging="smartContent_ContentChanging"> 
      <X:SmartContentControl.RenderTransform> 
       <TranslateTransform x:Name="translateTransformNew" X="0" Y="0"/> 
      </X:SmartContentControl.RenderTransform> 
     </X:SmartContentControl> 
     <ContentControl Content="{Binding ElementName=smartContent, Path=LastImage}"> 
      <ContentControl.RenderTransform> 
       <TranslateTransform x:Name="translateTransformLast" X="0" Y="0"/> 
      </ContentControl.RenderTransform> 
     </ContentControl> 
    </Grid> 

Aquí C#

private void smartContent_ContentChanging(object sender, RoutedEventArgs e) 
{ 
    Storyboard storyBoard = new Storyboard(); 
    DoubleAnimation doubleAnimation1 = new DoubleAnimation(0.0, -smartContent.RenderSize.Width, new Duration(new TimeSpan(0, 0, 0, 0, 500))); 
    DoubleAnimation doubleAnimation2 = new DoubleAnimation(smartContent.RenderSize.Width, 0.0, new Duration(new TimeSpan(0, 0, 0, 0, 500))); 

    doubleAnimation1.AccelerationRatio = 0.5; 
    doubleAnimation2.DecelerationRatio = 0.5; 
    storyBoard.Children.Add(doubleAnimation1); 
    storyBoard.Children.Add(doubleAnimation2); 
    Storyboard.SetTarget(doubleAnimation1, this.translateTransformLast); //--- this does not work 
    //Storyboard.SetTargetName(doubleAnimation1, "translateTransformLast"); -- this works 
    Storyboard.SetTargetProperty(doubleAnimation1, new PropertyPath(TranslateTransform.XProperty)); 
    Storyboard.SetTarget(doubleAnimation2, this.translateTransformNew);//--- this does not work 
    //Storyboard.SetTargetName(doubleAnimation2, "translateTransformNew"); -- this works 
    Storyboard.SetTargetProperty(doubleAnimation2, new PropertyPath(TranslateTransform.XProperty)); 
    if (smartContent.LastImage != null) 
     storyBoard.Begin(); 
} 

Respuesta

5

he encontrado respuesta aquí! Why don't these animations work when I'm using a storyboard?

Storyboard no puede animar a TranslateTransform, ya que no es UIElement. ¡Así es como lo hago ahora! :)

Storyboard.SetTarget(doubleAnimation1, this.lastImage); 
    Storyboard.SetTargetProperty(doubleAnimation1, new PropertyPath("RenderTransform.(TranslateTransform.X)")); 

    Storyboard.SetTarget(doubleAnimation2, this.smartContent); 
    Storyboard.SetTargetProperty(doubleAnimation2, new PropertyPath("RenderTransform.(TranslateTransform.X)")); 
+2

No es tan fácil si su transformación es parte de un grupo de transformación. Parece que encontraste un error legítimo (me he topado con él). http://connect.microsoft.com/VisualStudio/feedback/details/723701/storyboard-settarget-only-works-on-uielements-but-throws-no-exception –

+3

Si usted es parte del grupo, necesita golpear los hijos del grupo, y el orden es importante: Storyboard.SetTargetProperty (translatex, new PropertyPath ("RenderTransform.Children [1] .X")); – reuscam

Cuestiones relacionadas