我正在使用动画使窗口淡出焦点,然后关闭。
但是,关闭事件在动画之后立即发生。
在动画之后关闭窗口的最简单方法是什么?
在下面的代码中,MainWindow是第二个正在打开的窗口。在第一个窗口中单击按钮时,将调用此方法。
private void CloseMethod(object sender, RoutedEventArgs e)
{
MainWindow win = new MainWindow();
win.Show();
DoubleAnimation animation = new DoubleAnimation()
{
From = 1.0,
To = 0.0,
Duration = new Duration(TimeSpan.FromSeconds(2))
};
this.BeginAnimation(Window.OpacityProperty, animation);
this.Close();
}
Run Code Online (Sandbox Code Playgroud)
我接受了Omar的回答,但出于学习目的,我还想指出,如果使用情节提要,则在情节提要中Completed的动画发生后,可以使用该事件来调用关闭窗口的方法。结合一种Button.Click方法,这也可以达到预期的效果:
<Button Foreground="Red" ToolTip="Close this window." Click="ShowMainWin">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="EntireWindow"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0"
Duration="0:0:0.5"
Completed="CloseMethod"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
Close Window</Button>
Run Code Online (Sandbox Code Playgroud)
并且,在代码中,我定义了"ShowMainWin"和"CloseMethod"。
"ShowMainWin"单击按钮时发生,导致第二个窗口立即打开。Storyboard运行中的动画,导致第一个窗口消失。动画制作完成后,将"CloseMethod"被调用,从而导致第一个窗口关闭:
private void ShowMainWin(object sender, RoutedEventArgs e)
{
MainWindow win = new MainWindow();
win.Show();
}
public void CloseMethod(object sender, EventArgs e)
{
this.Close();
}
Run Code Online (Sandbox Code Playgroud)