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,而它被最小化(因为动画)。所以我使用了调用该方法的激活事件:

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.Normalset_Opacity方法中分配。如果您最大化窗口,单击您的按钮将其最小化,然后单击任务栏按钮,该窗口不会重新显示为最大化。

于 2012-06-16T20:58:32.633 回答