如何在运行时更改EasingDoubleKeyFrame价值?(How to change Easi

2019-09-17 00:07发布

我试图做一个TranslateTransform动画。 在动画中,我需要我的对象保持在窗口的中心。 我知道WPF动画可冻结。 我使用的是转换器,但它在启动时初始化值。 有什么办法来设置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>

Answer 1:

添加X:名称属性的EasingDoubleKeyFrame元素。 之后,你应该能够通过代码来访问它:

X:NAME = “关键帧”

然后:

keyframe.SetValue(EasingDoubleKeyFrame.ValueProperty,yourValue);



Answer 2:

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

为了解决这个问题,您需要做部分或全部工作的代码隐藏。”

从报价#1



Answer 3:

EasingDoubleKeyFrame无法通过访问x:Name属性。 相反,你应该使用不同的方法来定义EasingDoubleKeyFrameStaticResource ,并通过其链接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;

希望这可以帮助...



文章来源: How to change EasingDoubleKeyFrame value at Runtime?