为什么这个翻译动画不起作用?

Why is this translation animation not working?

我有以下动画,在某些事件中应该使按钮从左向右移动:

<UserControl.Resources>
    <Storyboard x:Key="Storyboard1">
        <DoubleAnimation Storyboard.TargetName="Studio" Storyboard.TargetProperty="Opacity" From="0" To="{Binding StudioOpacityValue}" Duration="0:0:2"/>
        <DoubleAnimation Storyboard.TargetName="Studio" Storyboard.TargetProperty="RenderTransform.(TranslateTransform.X)" From="0" To="500"  Duration="0:0:2">
            <DoubleAnimation.EasingFunction>
                <CubicEase EasingMode="EaseInOut"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
    </Storyboard>
</UserControl.Resources>

<Grid Name="mainGrid" >

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="FadeInMainButtonsAfterImport" SourceObject="{Binding Mode=OneWay}">
            <ei:ControlStoryboardAction Storyboard="{StaticResource Storyboard1}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>

    <Button x:Name ="Studio" Grid.Row="33" Grid.Column="57" Grid.ColumnSpan="36" Grid.RowSpan="36"  IsEnabled="{Binding IsStudioEnabled}" Opacity="{Binding StudioOpacityValue}" >
        <Button.RenderTransform>
            <TranslateTransform/>
        </Button.RenderTransform>
    </Button>

<Grid>

但是没有任何反应。可能是什么问题?

试试这个(我已将触发器移到按钮内):

<UserControl.Resources>
               <Storyboard x:Key="Storyboard1">
                        <DoubleAnimation Storyboard.TargetName="Studio" Storyboard.TargetProperty="Opacity" From="0" To="{Binding StudioOpacityValue}" Duration="0:0:2"/>
                        <DoubleAnimation Storyboard.TargetName="Studio" Storyboard.TargetProperty="RenderTransform.(TranslateTransform.X)" From="0" To="500"  Duration="0:0:2">
                            <DoubleAnimation.EasingFunction>
                                <CubicEase EasingMode="EaseInOut"/>
                            </DoubleAnimation.EasingFunction>
                        </DoubleAnimation>      
                    </Storyboard>
            </UserControl.Resources>

         <Grid Name="mainGrid" >

        <Button x:Name ="Studio" Grid.Row="33" Grid.Column="57" Grid.ColumnSpan="36" Grid.RowSpan="36"  IsEnabled="{Binding IsStudioEnabled}" Opacity="{Binding StudioOpacityValue}" >
            <i:Interaction.Triggers>
                    <i:EventTrigger EventName="FadeInMainButtonsAfterImport" SourceObject="{Binding Mode=OneWay}">
                        <ei:ControlStoryboardAction Storyboard="{StaticResource Storyboard1}"/>
                    </i:EventTrigger>
          <Button.RenderTransform>
                        <TranslateTransform/>
                    </Button.RenderTransform>

          </Button>

    <Grid>

你很接近,但我们需要调整一些东西。

打开按钮上的 属性,这样它就知道我们正在处理什么。现在你的目标是对象,而不是变换。所以我们做类似的事情;

<Button x:Name="Studio" 
        Grid.Row="33" Grid.Column="57" 
        Grid.ColumnSpan="36" Grid.RowSpan="36" 
        IsEnabled="{Binding IsStudioEnabled}" 
        Opacity="{Binding StudioOpacityValue}" >
   <Button.RenderTransform>
      <TranslateTransform x:Name="StudioTranslate" X="0"/>
   </Button.RenderTransform>
</Button>

您已经接近 DoubleAnimation,但中间有关键帧可以让该动画发生,因此请处理那些讨厌的样条插值,例如;

<DoubleAnimationUsingKeyFrames Storyboard.TargetName="StudioTranslate" 
                               Storyboard.TargetProperty="X" Duration="0:0:2">
   <SplineDoubleKeyFrame KeyTime="0:0:2" Value="500" />
</DoubleAnimationUsingKeyFrames>

无论如何,这通常是我做事的方式。希望对你有帮助,干杯。

附录:

为了将缓动函数关联到 DoubleAnimationUsingKeyFrames,我们从样条曲线翻转到 EasingDoubleKeyFrame:

<DoubleAnimationUsingKeyFrames Storyboard.TargetName="StudioTranslate" 
                               Storyboard.TargetProperty="X" Duration="0:0:2">
   <EasingDoubleKeyFrame KeyTime="0:0:2" Value="500">
      <EasingDoubleKeyFrame.EasingFunction>
         <CubicEase EasingMode="EaseInOut"/>
      </EasingDoubleKeyFrame.EasingFunction>
   </EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>