1

1 つの UI 要素の複数のプロパティを同時にアニメーション化する必要があります。

たとえば、ウィンドウの幅と高さを同期的に縮小します。

何か案が?

        DoubleAnimation widthAnimation = new DoubleAnimation
        {           
            To = 0,
            Duration = TimeSpan.FromSeconds(5)
        };

        DoubleAnimation heightAnimation = new DoubleAnimation
        {
            To = 0,
            Duration = TimeSpan.FromSeconds(5)
        };

        Storyboard.SetTargetProperty(widthAnimation, new PropertyPath(Window.WidthProperty));
        Storyboard.SetTarget(widthAnimation, this);

        Storyboard.SetTargetProperty(heightAnimation, new PropertyPath(Window.HeightProperty));
        Storyboard.SetTarget(heightAnimation, this);

        Storyboard s = new Storyboard();
        s.Completed += FadeOut_Completed;
        s.Children.Add(widthAnimation);
        s.Children.Add(heightAnimation);
        this.BeginStoryboard(s, HandoffBehavior.SnapshotAndReplace, true);    

アニメーションを段階的に実行します。幅の変更が完了すると、高さが変わります。:|

4

1 に答える 1

2

あなたのコードを見た後、幅と高さを同時にアニメーション化しようとしていることがわかりWindowました

しかし、ウィンドウは実際のWPFコンポーネントではなく、プラットフォームコンポーネントであるため、後悔することを後悔しています。ただし、ウィンドウのコンテンツは、コードを介して予想されるように完全に制御できますが、ウィンドウはそうではありません。そのような変更は、Pinvokeを介してルーティングされます。そして、あなたが直面している問題は既知の問題であり、回避策は少し複雑です

ここに1つの解決策があります。これはpinvokeを使用してウィンドウの高さと幅をアニメーション化します

WPF ウィンドウの幅と高さをアニメーション化する

Microsoft で作成された同様の問題のバグを次に示します。結果は (修正されないためクローズ)

https://connect.microsoft.com/VisualStudio/feedback/details/715415/window-width-height-animation-in-wpf-got-broken-on-net-framework-4-0

追加

以下は、実際には問題を解決していないサンプルですが、他の要素に対してそのようなアニメーションを実行するために必要な行数を減らすのに役立ちます. それはより少ない行でコードを書き直すことです

        DoubleAnimation anim = new DoubleAnimation
        {
            To = 0,
            Duration = TimeSpan.FromSeconds(5)
        };

        border.BeginAnimation(Border.HeightProperty, anim);
        border.BeginAnimation(Border.WidthProperty, anim);

ウィンドウ以外の要素でこのコードを試してください。色が塗りつぶされた境界線を使用しました

Window一目であなたのコードを見落としてしまったことをお詫びします

于 2014-06-28T13:03:43.357 に答える