C# 移除VestoryBoard,使其动画恢复到原始状态
我有以下代码:C# 移除VestoryBoard,使其动画恢复到原始状态,c#,.net,wpf,animation,C#,.net,Wpf,Animation,我有以下代码: <DataTrigger.EnterActions> <BeginStoryboard Name="foo" Storyboard="{StaticResource FadeInCurrentStoryBoard}"/> </DataTrigger.EnterActions> <DataTrigger.ExitActions> <RemoveStoryboard BeginStoryboardName="foo"/&g
<DataTrigger.EnterActions>
<BeginStoryboard Name="foo" Storyboard="{StaticResource FadeInCurrentStoryBoard}"/>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="foo"/>
</DataTrigger.ExitActions>
...
<Storyboard x:Key="FadeInCurrentStoryBoard">
<ColorAnimation Duration="0:0:0.2" To="#75BAFF" Storyboard.TargetProperty="(TextBox.Foreground).(SolidColorBrush.Color)" Storyboard.TargetName="MainText"/>
...
...
...
问题是删除情节提要是立即的,但我希望有0.2的延迟返回到原始值。我看不到任何设置删除持续时间的属性?我认为您要做的是在ExitActions中放置另一个名为FadeOutStoryboard的情节提要,它执行相反的操作,而不是RemoveStoryboard
RemoveStoryboard是一种在故事板不再需要时释放内存的方法,而不是反转以前动画的效果 我认为最好的办法是创建您自己的类,该类继承自ControllableStoryboardAction(就像RemoveStoryboard操作一样),并向其添加延迟属性。然后,在调用它时,使用计时器来考虑延迟,当计时器完成时,移除情节提要 RemoveStoryboard类(使用JustDecompile)如下所示:
public sealed class RemoveStoryboard : ControllableStoryboardAction
{
public RemoveStoryboard()
{
}
internal override void Invoke(FrameworkElement containingFE, FrameworkContentElement containingFCE, Storyboard storyboard)
{
if (containingFE != null)
{
storyboard.Remove(containingFE);
return;
}
storyboard.Remove(containingFCE);
}
}
在我看来,您可以简单地使用
ColorAnimation
上的属性并将其设置为true
这将使动画重复1次,包括初始颜色更改,然后是相反的颜色更改,这意味着它将在相同的持续时间内转换回原始值
<ColorAnimation Duration="0:0:0.2" AutoReverse="True"..
事实上,@TylerD87-answer可能是对的,您希望重置某些内容的状态,而不是试图破坏故事板。至少你是这么说的。是吗?你说得对。其他答案很好,但这正是我需要的。我怀疑这一点,但希望有一种更独特的处理方式