我试图做一个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>
添加X:名称属性的EasingDoubleKeyFrame元素。 之后,你应该能够通过代码来访问它:
X:NAME = “关键帧”
然后:
keyframe.SetValue(EasingDoubleKeyFrame.ValueProperty,yourValue);
“这是因为动画冻结的对象。有一个在更多信息MSDN文档 ,但基本上这意味着你不能用绑定,因为冻结对象的属性(即动画)不能改变。
为了解决这个问题,您需要做部分或全部工作的代码隐藏。”
从报价#1
该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;
希望这可以帮助...