2010-06-02 1 views
6

Почему Storyboard.SetTargetName работает, но Storyboard.SetTarget нет? Здесь 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> 

Здесь 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(); 
} 

ответ

5

Я нашел ответ здесь! Why don't these animations work when I'm using a storyboard?

Раскадранная анимация TranslateTransform, так как это не UIElement. Вот как я это делаю сейчас! :)

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

Не так просто, если ваше преобразование является частью группы преобразований. Похоже, вы нашли законную ошибку (я только что наткнулся на нее сам). http://connect.microsoft.com/VisualStudio/feedback/details/723701/storyboard-settarget-only-works-on-uielements-but-throws-no-exception –

+3

Если вы являетесь частью группы, вам нужно нажать важны дети группы и порядок: Storyboard.SetTargetProperty (translatex, новый PropertyPath («RenderTransform.Children [1] .X»)); – reuscam

Смежные вопросы