c# - 淡出 window

扫码查看

我目前正在开发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);
}

10-02 00:31
查看更多