オルタナティブ・ブログ > IT's my business >

IT業界のコメントマニアが始めるブログ。いつまで続くのか?

(XAML#10)「モーダル表示とオーナーの設定」

»

WPF では、ダイアログボックスなどで、ShowDialog でウィンドウをモーダル表示した場合でも、表示されるウィンドウと、ShowDialog メソッドを呼び出したイベントハンドラーを持つウィンドウとは自動的には関連付けられません。たとえば、タスクバーを使って呼び出し元のウィンドウを選ぶと、そのウィンドウがアクティブ化表示されます(モーダル表示されているウィンドウがあるので、操作はできません)。

このような現象を避けるためには、ShowDialog メソッドを呼び出す前に、表示するウィンドウの Owner ウィンドウを明示的に指定しておきます。たとえば、次のように記述すると、メインウィンドウの縦横半分の大きさのウィンドウを、その中心にモーダル表示させることができ、タスクバーを使ってメインウィンドウをアクティブ化させることもできなくなります。

private void Button_Click(object sender, RoutedEventArgs e)
{
    var wnd = new Window();
    wnd.Title = "dynamic window #1";
    wnd.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
    wnd.Width = this.Width / 2;
    wnd.Height = this.Height / 2;
    wnd.Owner = this;
    wnd.ShowDialog();
}

Xaml10

Comment(0)