我有一个关于Silverlight动画的问题,似乎无法解决。这个问题似乎已经被广泛讨论,但是用来解决它的技术在我的情况下似乎不起作用。
这里是我用来动画化名为“underGrid”的网格的故事板代码。 underGrid是一个基础网格,我正在对其应用比例和位置偏移,以响应用户的鼠标输入,使他们能够实时缩放和移动网格。下面的ResetGrid故事板只是从当前比例和位置值重新回到比例{1, 1}和位置{0, 0},为用户重置视图。我希望能够在用户单击重置按钮时应用此动画,但是它运行一次后会冻结比例和平移变换(如http://msdn.microsoft.com/en-us/library/aa970493.aspx所讨论的那样)。这意味着当用户然后使用鼠标移动网格时,它不会移动。我已经尝试了我能想到的一切来阻止动画对依赖属性产生影响。我尝试挂钩Completed事件并尝试(在其他事情中)停止动画,将动画寻找到0,循环遍历ResetGrid Children并使用StoryBoard.SetTarget()。我还尝试设置FillBehavior。无论我做什么都似乎没有任何区别,比例和平移始终被卡住,无法在用户代码中再次设置。
这里是我用来动画化名为“underGrid”的网格的故事板代码。 underGrid是一个基础网格,我正在对其应用比例和位置偏移,以响应用户的鼠标输入,使他们能够实时缩放和移动网格。下面的ResetGrid故事板只是从当前比例和位置值重新回到比例{1, 1}和位置{0, 0},为用户重置视图。我希望能够在用户单击重置按钮时应用此动画,但是它运行一次后会冻结比例和平移变换(如http://msdn.microsoft.com/en-us/library/aa970493.aspx所讨论的那样)。这意味着当用户然后使用鼠标移动网格时,它不会移动。我已经尝试了我能想到的一切来阻止动画对依赖属性产生影响。我尝试挂钩Completed事件并尝试(在其他事情中)停止动画,将动画寻找到0,循环遍历ResetGrid Children并使用StoryBoard.SetTarget()。我还尝试设置FillBehavior。无论我做什么都似乎没有任何区别,比例和平移始终被卡住,无法在用户代码中再次设置。
有人可以建议我尝试一些我没有列出来的东西吗(无论是激进还是其他方面)?我想要的只是动画在完成时完全停止并分离。
故事板XAML:
<Storyboard x:Name="ResetGrid">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="underGrid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
<EasingDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="underGrid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">
<EasingDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="underGrid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
<EasingDoubleKeyFrame KeyTime="00:00:00.5000000" Value="1">
<EasingDoubleKeyFrame.EasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="underGrid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
<EasingDoubleKeyFrame KeyTime="00:00:00.5000000" Value="1">
<EasingDoubleKeyFrame.EasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>