Wpf 当我指定默认持续时间时,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管理我的控件状态。下面的工作很好,给了我一个状态之间一秒钟的动画

<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秒的延迟,然后是抓拍而不是动画。

我发现这与生成的转换无关。我很不幸地使用了两个
VisualStateManager
不喜欢的动画

首先,
VisualStates
中的动画应该具有
Duration=“0”
,因为它们是稳定状态。我移除它们是因为这是我在各州之间获得动画的唯一途径。然而,我实际看到的是稳态期间的动画(即过渡后的,因此在添加默认过渡长度时引入了暂停)

我意识到这一点的唯一原因是添加了一个
彩色动画
,效果很好

我的
LayoutTransform.ScaleY的
DoubleAnimation
失败,因为我的目标是转换本身。多亏了,虽然原因不明,但我通过针对元素实现了它:

<DoubleAnimation Storyboard.TargetName="Header" To="0" Duration="0"
 Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(ScaleTransform.ScaleY)" />

这只剩下我的
厚度动画
,它仍然只是捕捉到值。我已经为此提出了建议,现在我已经缩小了问题的范围