我正在尝试制作 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>
答案 0 :(得分:0)
将x:Name属性添加到EasingDoubleKeyFrame元素。 之后您应该可以通过代码访问它:
X:名称= “关键帧”
然后:
keyframe.SetValue(EasingDoubleKeyFrame.ValueProperty,yourValue);
答案 1 :(得分:0)
“这是因为动画是可冻结的对象。MSDN Documentation中有更多信息,但基本上它意味着你不能使用绑定,因为冻结对象中的属性(即动画)不能改变。
要解决此限制,您需要在代码隐藏中完成部分或全部工作。“
答案 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;
希望这会有所帮助......