0

我正在尝试使用 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 秒的动画时间,它会非常混乱。

设置“编辑”时:

  • 立即捕捉到 1 ,DoubleAnimation没有动画。
  • ThicknessAnimation等待 2 秒,然后动画超过 1秒

当设置为“正常”时:

  • 立即捕捉到 0 ,ThicknessAnimation没有动画。
  • DoubleAnimation等待 2 秒,然后动画超过 1 秒。

谁能解释到底发生了什么?

我已经尝试过设置Duration="0"所有动画,就像某些样本似乎做的那样,但这所做的只是删除了有效的动画。我仍然得到 2 秒的延迟,然后是捕捉而不是动画。

4

1 回答 1

0

好吧,我发现足以知道这与GeneratedTransition. 我只是很不幸地使用了两个VisualStateManager不喜欢的动画。

首先,VisualStates 应该有中的动画Duration="0",因为这些是稳定状态。我正在删除它们,因为这是我在状态之间获得任何类型动画的唯一方法。然而,我实际看到的是稳态期间的动画(即转换之后,因此在我添加默认转换长度时引入了暂停)。

我意识到上述情况的唯一原因是添加了一个ColorAnimation,它工作得很好。

DoubleAnimationLayoutTransform.ScaleY失败是因为我的目标是转换本身。感谢这个问题,虽然原因未知,但我通过定位元素来让它工作:

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

这只是留下 my ThicknessAnimation,它仍然只是捕捉到值。我已经为此提出了另一个问题,现在我已经缩小了问题的范围。

于 2012-10-05T11:05:03.250 回答