0

VisualStateManager を使用してコントロールの状態を管理しようとしています。以下は問題なく動作し、状態間で 1 秒間のアニメーションが表示されます。

<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 にスナップします。
  • ThicknessAnimation2 秒間待機してから、1 秒間アニメートします

「ノーマル」設定時:

  • ThicknessAnimationアニメーションなしで、即座に 0 にスナップします。
  • DoubleAnimation2 秒間待機してから、1 秒間アニメートします。

誰が一体何が起こっているのか説明できますか?

Duration="0"特定のサンプルのようにすべてのアニメーションを設定しようとしましたが、これは機能するアニメーションを削除するだけです。まだ 2 秒の遅延が発生し、アニメーションではなくスナップします。

4

1 に答える 1

0

これはGeneratedTransition. VisualStateManager気に入らないアニメーションを 2 つ使用していたのは運が悪かっただけです。

まず、これらは定常状態であるため、内のアニメーションには が必要VisualStates です。Duration="0"状態間で何らかの種類のアニメーションを取得する唯一の方法だったので、それらを削除していました。しかし、私が実際に見たのは、定常状態期間中のアニメーションでした (つまり、トランジションの、デフォルトのトランジションの長さを追加したときに一時停止が導入されました)。

上記に気付いた唯一の理由は、 a を追加したことでColorAnimation、うまく機能しました。

変換自体をターゲットにしていたため、私DoubleAnimationの ofLayoutTransform.ScaleYは失敗していました。この質問のおかげで、理由は不明ですが、代わりに要素をターゲットにすることで機能しました:

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

これにより、まだ値にスナップしている myThicknessAnimationが残ります。これについて別の質問をしましたが、問題を絞り込みました。

于 2012-10-05T11:05:03.250 に答える