2009-06-02 10 views
3

私は、メインウィンドウ上のストーリーボードの対でアニメーションされるユーザーコントロールを含む単純なWPFアプリケーションを持っています。私はユーザーコントロールの不透明度、scaletransform.scalex、scaletransform.scaleyをアニメーション化して、ポップで表示します。それは最初に実行される以外は涼しく見えます。アニメーションは3/10秒かかると設定されていますが、テスト中にこれを増やしました。私は、アニメーション化しているプロパティの値が期待どおりにデフォルトにならないという問題があるかどうかを確認するために、デフォルト値を数秒で設定しようとしました。それは何もしなかった。私は明示的に私のデフォルトの値を設定するのに役立つかどうかを確認するためにロードされたウィンドウ上で私の "非表示"アニメーションを呼び出すが、それも動作しませんでした。アニメーションを初めて起動するときにランタイムが実行している初期化はありますか? UIを表示する前に、そのような初期化を明示的に呼び出す方法はありますか?症状は、コントロールが最初のアニメーションに約2/10秒まで表示されないことです。場合によってはそれが長くなり、完全にアニメーション化された後にコントロールが表示されます(不透明度とサイズは最終的に表示される最終値です)。WPFアニメーションの最初の実行

+0

最初のアニメーションはどのようにトリガーされますか?また、説明した症状から、不透明度がスケール変換後に異なるレートで変化しているように見えます。 – rmoore

+0

すべてのアニメーションがマウスクリックによって開始されるため、最初のアニメーションがトリガーされています。私はコードの中でこれを行うので、必要に応じてイベントを処理済みとしてマークすることができます。不透明度は他のすべてのアニメーションでもうまく機能します。基本的には、最初のアニメーションと他のアニメーションの間にコードに違いはありません。私が思っていたのは、WPFランタイムが何かを最適化している(私のコントロールがデフォルトでScaleTransformとOpacityによって隠されています)、これが私がいくつかの自動メモリ最適化などのために支払った価格です。 – Rich

+0

WPFランタイムが「ああ、このコントロールはScaleTransformsとOpacityが0なのですぐに見ることができません。後でこれを動的にロードしてください」と期待している間にキャッチアップを再生します。自身を視野に入れてアニメーション化する。 – Rich

答えて

1

アニメーションの前にUserControlのDataContextを設定しているようです。おそらく、ビジュアルオブジェクトを作成してアニメーションが開始されると同時にビジュアルツリーに追加するというバインディングがあると考えられます。これには、アニメーションが戦っている処理が必要です。これを回避する方法は、(DataContextを設定して)コントロールをインスタンス化することですが、非表示にすることで、ビジュアルオブジェクトの作成をアニメーションの時点で実行する必要はありません。 (私の同僚のTim Lee経由)

+0

さて、あなたは絶対に正しいです...これは私の最初の勘違いでした。しかし、ランタイムはそれが自分のために余りにも賢明にしようとしています。ビュー(不透明度、負のマージン、scaletransform、translatetransform)からそれを隠す方法を試すと、同じことが行われます。私はそれを見ることができれば、私は最初にDataContextを設定する必要はありません...最初のアニメーションはスムーズに行く。ほとんどの場合、ランタイムを実際には表示できないと思うようにトリックする必要があります。つまり、私はそれを明示的に指示してビジュアルツリーを構築する方法を知る必要があります。後者はハッキリしていないと感じます。 – Rich

+0

このスレッドは古代のものだと私は理解していますが、どのようにしてこの問題を解決しましたか?それぞれのコントロールを1の幅に設定しても効果がありませんでした。私はWPFには比較的新しいので、ここでは線の間に隠された手がかりはありませんでした。 – Harti

関連する問題