しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Window.Closing と EventTrigger

AllowsTransparency = True にしているウィンドウに対してフェードアウトをさせようと思って

<Window.Trigger>
    <EventTrigger RoutedEvent="Window.Closing">
        <EventTrigger.Action>
            <BeginStoryboard Storyboard.TargetName="FadeOutAnimation" />
        </EventTrigger.Action>
    </EventTrigger>
</Window.Trigger>

のように XAML を書いて、実行させると例外を吐いて終了してしまいました。その時はなぜ落ちるのか頭をひねりましたが、ものすごく単純な理由だったんです。
実は Window.Closing イベントは RoutedEvent じゃないんです、System.ComponentModel.CancelEventHandler なんですよ。なので EventTrigger では扱えずに実行時に落ちたというわけです。
もしフェードアウトを実現しようとなると、Closing イベントハンドラで FadeOutAnimation を実行してやる方法になります。

private void Window_Closing(object sender, CancelEventArg e)
{
    BeginStoryboard((Storyboard)FindResource("FadeOutAnimation"));
}

って感じでしょうか。
ちなみに Window.Closed も RoutedEvent じゃないです、ただのイベントです。