2

我正在尝试制作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>
4

3 回答 3

0

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

希望这可以帮助...

于 2014-02-11T10:20:53.593 回答
0

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

为了克服这个限制,您需要在代码隐藏中完成部分或全部工作。”

引用Stackoverflow

于 2012-11-01T15:12:48.773 回答
0

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

x:Name="关键帧"

然后:

keyframe.SetValue(EasingDoubleKeyFrame.ValueProperty, yourValue);

于 2012-05-03T05:48:42.237 回答