2011年8月25日木曜日

wpf : 以前に表示されていないWindowにOwnerプロパティを設定することはできません

wpfに次のような例外メッセージがあります。

  • 以前に表示されていないWindowにOwnerプロパティを設定することはできません。

InvalidOperationExceptionのメッセージです。 こんなコードで再現できます。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        Window w = new Window();
        w.Owner = this;
        w.Show();
    }
}

「子Windowが表示されてからしかOwnerが設定できないのか? イベントの追加とか親Windowの参照の受け渡しとか、微妙に面倒だなぁ...」 と、思っていたら違うようです。 そういえば、前の投稿

AppConfigWindow confWindow = new AppConfigWindow();
confWindow.Owner = this;
confWindow.ShowDialog()

ってのが通ってましたしね。

英語版の例外メッセージはこんな文章らしいです。

  • Cannot set Owner property to a Window that has not been shown previously.

意訳すると、

  • まだ表示されていないWindowを他のWindowのOwnerプロパティに設定することはできません。

...なんて言ったらいいんでしょう? とりあえず、SourceInitializedイベント以降ならこの例外は出ないようです。