我目前正在开发WPF C#应用程序。我已经将事件触发器添加到窗体的xaml中,以便在加载窗口时淡入并在关闭窗口时淡出。
淡入效果完美,没有任何问题,但淡出效果不佳。
我进行了设置,以便窗口在加载时淡入,具有一个持续5秒的计时器,然后调用窗体淡出事件。
但是,窗口不会消失,只会立即关闭没有动画。以下是我用于淡入和淡出事件的代码
<Window.Triggers>
<EventTrigger RoutedEvent="Window.Loaded">
<BeginStoryboard>
<Storyboard Name="FormFade">
<DoubleAnimation Name="FormFadeAnimation"
Storyboard.TargetProperty="(Window.Opacity)"
From="0.0" To="1.0" Duration="0:0:1"
AutoReverse="False" RepeatBehavior="1x" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="Window.Unloaded">
<BeginStoryboard>
<Storyboard Name="FormFadeOut" Completed="FormFadeOut_Completed">
<DoubleAnimation Name="FormFadeOutAnimation"
Storyboard.TargetName="FormFadeOut"
Storyboard.TargetProperty="(Window.Opacity)"
From="1.0" To="0.0" Duration="0:0:1"
AutoReverse="False" RepeatBehavior="1x" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
谢谢你的尽心帮助。
最佳答案
Unloaded不适用于此事件,我不确定此事件是否可能在Windows中发生。您需要处理Closing
,防止其实际关闭,启动动画并在发生动画的Completed
事件时关闭它。
例如
<Window ...
Closing="Window_Closing">
private void Window_Closing(object sender, CancelEventArgs e)
{
Closing -= Window_Closing;
e.Cancel = true;
var anim = new DoubleAnimation(0, (Duration)TimeSpan.FromSeconds(1));
anim.Completed += (s, _) => this.Close();
this.BeginAnimation(UIElement.OpacityProperty, anim);
}