我将介绍一下我想要做的事情:
我创建了一个自定义按钮,可以通过淡出动画最小化我的窗口,所以这里是代码:
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;
}
然而,同样的问题。希望你能帮忙。
非常感谢你。 如果需要任何其他说明,请与我们联系。
答案 0 :(得分: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的原因不是dependency property value setting precedence。简而言之,动画设置的值优先于“本地”值设置,即通过分配给属性设置的值。
在你的情况下,动画已经完成,但它仍然“保持”Opacity
依赖属性。但是,如果使用
anim.FillBehavior = FillBehavior.Stop;
然后动画将在Opacity
属性完成后“释放”它,然后您不需要另一个动画将其设置回1.原始的set_Opacity
方法应该可以工作。
另请注意,您不应在WindowState = WindowState.Normal
方法中指定set_Opacity
。如果最大化窗口,单击按钮将其最小化,然后单击任务栏按钮,窗口不会再次出现最大化。