Wpf 当我指定默认持续时间时,VisualStateManager会出错
我正在尝试使用VisualStateManager管理我的控件状态。下面的工作很好,给了我一个状态之间一秒钟的动画Wpf 当我指定默认持续时间时,VisualStateManager会出错,wpf,xaml,animation,storyboard,visualstatemanager,Wpf,Xaml,Animation,Storyboard,Visualstatemanager,我正在尝试使用VisualStateManager管理我的控件状态。下面的工作很好,给了我一个状态之间一秒钟的动画 <VisualStateManager.VisualStateGroups> <VisualStateGroup Name="EditStates"> <!-- Default transition time commented out <VisualStateGroup.Transitions>
<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秒的动画时间,它会非常糟糕
设置“编辑”时:
会立即捕捉到1,而不显示动画DoubleAnimation
等待2秒,然后在1秒以上设置动画 第二ThicknessAnimation
立即捕捉到0,而不显示动画ThicknessAnimation
等待2秒,然后在1秒以上设置动画DoubleAnimation
我尝试过在所有动画上设置
Duration=“0”
,就像某些示例所做的那样,但这只是删除了有效的动画。我仍然会有2秒的延迟,然后是抓拍而不是动画。我发现这与生成的转换无关。我很不幸地使用了两个VisualStateManager
不喜欢的动画
首先,VisualStates
中的动画应该具有Duration=“0”
,因为它们是稳定状态。我移除它们是因为这是我在各州之间获得动画的唯一途径。然而,我实际看到的是稳态期间的动画(即过渡后的,因此在添加默认过渡长度时引入了暂停)
我意识到这一点的唯一原因是添加了一个彩色动画
,效果很好
我的LayoutTransform.ScaleY的DoubleAnimation
失败,因为我的目标是转换本身。多亏了,虽然原因不明,但我通过针对元素实现了它:
<DoubleAnimation Storyboard.TargetName="Header" To="0" Duration="0"
Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(ScaleTransform.ScaleY)" />
这只剩下我的厚度动画
,它仍然只是捕捉到值。我已经为此提出了建议,现在我已经缩小了问题的范围