ウィンドウの親子関係を設定する - ウィンドウのOwnerを設定する - WPF

WPFアプリケーションで、ウィンドウの親子関係を指定するコードを紹介します。

プログラム

UI

下図のUIを作成します。

MainWindow.xaml

メインウィンドウには、ButtonとLabelを配置します。

SubWindow.xaml

サブウィンドウには、Labelを配置します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfShowWindow
{
  /// <summary>
  /// MainWindow.xaml の相互作用ロジック
  /// </summary>
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();
    }

    private void button_Click(object sender, RoutedEventArgs e)
    {
      SubWindow sw = new SubWindow();
      sw.Owner = this;
      sw.Show();
    }
  }
}

解説

ウィンドウのクラスのOwnerプロパティを設定することで、ウィンドウの親子関係を設定できます。今回の例では、SubWindowsクラスのオブジェクトのOwnerプロパティに、MainWindowのオブジェクトを代入しました。これにより、SubWindowはMainWindowの子ウィンドウとなります。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


MainWindowで[Button]ボタンをクリックします。SubWindowが表示されます。


MainWindowを閉じると、SubWindowも閉じられ、アプリケーションは終了します。

参考:Ownerを設定しない場合の挙動について

ButtonのClickイベントを下記のコードに変更します。
    private void button_Click(object sender, RoutedEventArgs e)
    {
      SubWindow sw = new SubWindow();
      sw.Show();
    }

動作結果

プロジェクトを実行すると、下図のウィンドウが表示されます。


[Button]をクリックすると、SubWindowが表示されます。


MainWindowを閉じてもSubWindowは表示されたままであり、アプリケーションは終了しません。


MainWindow, SubWindowを含めた、すべてのウィンドウが閉じられるとアプリケーションは終了します。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2016-06-10
iPentec all rights reserverd.