2

私がやろうとしていることについて、いくつかの背景を説明します。

フェードアウトアニメーションでウィンドウを最小化するカスタマイズされたボタンを作成したので、そのコードは次のとおりです。

private void minimize_Window(object sender, EventArgs e)
{
    var anim = new DoubleAnimation(0, (Duration)TimeSpan.FromSeconds(1));
    anim.Completed += (s, _) => this.Minimize();
    this.BeginAnimation(UIElement.OpacityProperty, anim);
}

private void Minimize()
{
    WindowState = WindowState.Minimized;
}

まったく問題なく動作しますが、問題は、タスク バーからプログラムを取得しようとしても何も実行されないことです (最小化した後にタスク バーからプログラムをクリックしてもプログラムが表示されません)。私が理解しているのは、(アニメーションのために)最小化されている間、プログラムの不透明度が0に設定されているということです。そこで、そのメソッドを呼び出す Activated イベントを使用しました。

private void set_Opacity(object sender, EventArgs e)
{
    rectangle2.Opacity = 1;
    WindowState = WindowState.Normal;
}

それでも、同じ問題。お役に立てば幸いです。

どうもありがとうございました。 他に説明が必要な場合はお知らせください。

4

1 に答える 1

1

別のアニメーションを使用して、不透明度を 1 に戻してみてください。

    private void set_Opacity(object sender, EventArgs e)
    {
        var anim = new DoubleAnimation(1, (Duration)TimeSpan.FromSeconds(0));
        this.BeginAnimation(UIElement.OpacityProperty, anim);
    }

編集: このアプローチが機能し、不透明度を 1 に設定するだけでは機能しない理由は、依存関係プロパティの値の設定が優先されるためです。つまり、アニメーションによって設定された値は、「ローカル」な値セット、つまりプロパティに割り当てることによって設定された値よりも優先されます。

あなたの場合、アニメーションは終了しましたが、Opacity依存関係プロパティを「保持」していました。ただし、フェードアウト アニメーションを

    anim.FillBehavior = FillBehavior.Stop;

その後、アニメーションは終了するとプロパティを「解放」し、Opacity別のアニメーションでプロパティを 1 に戻す必要はありませんset_Opacity。その後、元のメソッドが機能するはずです。

また、メソッドで割り当てるべきではないことに注意WindowState = WindowState.Normalしてくださいset_Opacity。ウィンドウを最大化し、ボタンをクリックして最小化してからタスクバー ボタンをクリックすると、ウィンドウは最大化された状態で再表示されません。

于 2012-06-16T20:58:32.633 に答える