我正在尝试使用VisualStateManager来管理我的控件状态。以下工作正常,并给我一个状态之间的一秒动画。
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="EditStates">
<!-- Default transition time commented out
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:2"></VisualTransition>
</VisualStateGroup.Transitions>-->
<VisualState Name="Normal">
<Storyboard>
<ThicknessAnimation Storyboard.TargetName="ViewBorder"
Storyboard.TargetProperty="Margin" To="0"/>
<DoubleAnimation Storyboard.TargetName="HeaderTransform"
Storyboard.TargetProperty="ScaleY" To="0" />
</Storyboard>
</VisualState>
<VisualState Name="Editing">
<Storyboard>
<ThicknessAnimation Storyboard.TargetName="ViewBorder"
Storyboard.TargetProperty="Margin" To="100,0,100,100"/>
<DoubleAnimation Storyboard.TargetName="HeaderTransform"
Storyboard.TargetProperty="ScaleY" To="1" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
但是,如果我取消注释转换代码以尝试设置2秒的动画时间,那么它会非常混乱。
设置“编辑”时:
DoubleAnimation
即时捕捉到1,没有动画。ThicknessAnimation
等待2秒,然后动画超过1
第二设置“正常”时:
ThicknessAnimation
即时捕捉到0,没有动画。DoubleAnimation
等待2秒,然后动画超过1秒。任何人都可以解释发生了什么事吗?
我尝试在所有动画上设置Duration="0"
,就像某些样本似乎一样,但所有这一切都会删除有效的动画。我仍然得到2秒的延迟,然后拍摄而不是动画。
答案 0 :(得分:0)
我已经发现足以知道这与GeneratedTransition
没有任何关系。我只是不幸使用VisualStateManager
不喜欢的两个动画。
首先,VisualStates
中的动画应具有Duration="0"
,因为这些是稳定状态。我正在移除它们,因为这是我在状态之间获得任何类型动画的唯一方式。然而,我实际看到的是在稳定状态期间的动画(即在之后的转换,因此当我添加默认转换长度时引入暂停)。
我实现上述目标的唯一原因是添加了ColorAnimation
,效果很好。
我DoubleAnimation
的{{1}}失败了,因为我的目标是变换本身。感谢this question,虽然原因不明,但我通过定位元素来实现它:
LayoutTransform.ScaleY
这只留下我的<DoubleAnimation Storyboard.TargetName="Header" To="0" Duration="0"
Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(ScaleTransform.ScaleY)" />
,它仍然只是捕捉到价值。我已经为此提出了another question,现在我把问题缩小了。