如何在运行时更改EasingDoubleKeyFrame值?

时间:2012-05-03 05:33:42

标签: c# wpf xaml animation expression-blend

我正在尝试制作 TranslateTransform 动画。在动画中,我需要我的对象保持在窗口的中心。我知道WPF动画是Freezable。我正在使用转换器,但它在启动时初始化值。有没有办法在运行时设置 EasingDoubleKeyFrame 的值?

这是我的XAML代码:

<Storyboard x:Key="Storyboard1">
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="grid">
        <EasingDoubleKeyFrame KeyTime="0" Value="{Binding Width, Converter={StaticResource Minus}, ElementName=grid}"/>
        <EasingDoubleKeyFrame KeyTime="0:0:1" Value="{Binding Width, Converter={StaticResource EnteringValueConverter}, ElementName=grid}"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

3 个答案:

答案 0 :(得分:0)

将x:Name属性添加到EasingDoubleKeyFrame元素。 之后您应该可以通过代码访问它:

X:名称= “关键帧”

然后:

keyframe.SetValue(EasingDoubleKeyFrame.ValueProperty,yourValue);

答案 1 :(得分:0)

“这是因为动画是可冻结的对象。MSDN Documentation中有更多信息,但基本上它意味着你不能使用绑定,因为冻结对象中的属性(即动画)不能改变。

要解决此限制,您需要在代码隐藏中完成部分或全部工作。“

引自Stackoverflow

答案 2 :(得分:0)

无法通过EasingDoubleKeyFrame属性访问x:Name。相反,您应该使用不同的方法将EasingDoubleKeyFrame定义为StaticResource,并通过ResourceKey将其链接为:

<UserControl.Resources>
    <EasingDoubleKeyFrame x:Key="myEasingKey" KeyTime="0:0:2" Value="136" />
    <Storyboard x:Key="Storyboard1">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"
                                       Storyboard.TargetName="rectangle">
             <StaticResource ResourceKey="myEasingKey" />
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</UserControl.Resources>

通过后面的代码访问它,如下所示:

(EasingDoubleKeyFrame)Resources["myEasingKey"].Value = X;

希望这会有所帮助......