Storyboard.SetTarget与Storyboard.SetTargetName

0xD*_*EEF 7 c# wpf xaml storyboard

为什么Storyboard.SetTargetName可以正常工作,但Storyboard.SetTarget却没有?在这里xaml -

    <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>
Run Code Online (Sandbox Code Playgroud)

在这里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();
}
Run Code Online (Sandbox Code Playgroud)

0xD*_*EEF 5

我在这里找到了答案! 当我使用故事板时,为什么这些动画不起作用?

故事板无法为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)"));
Run Code Online (Sandbox Code Playgroud)

  • 如果您是该组的一员,则需要命中该组的子项,并且命令很重要:Storyboard.SetTargetProperty(translatex,new PropertyPath("RenderTransform.Children [1] .X")); (3认同)
  • 如果您的变换是变换组的一部分,那就不那么容易了.看起来你发现了一个合法的错误(我刚刚碰到它).http://connect.microsoft.com/VisualStudio/feedback/details/723701/storyboard-settarget-only-works-on-uielements-but-throws-no-exception (2认同)