ウィンドウの親子関係を設定する - ウィンドウのOwnerを設定する
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を愛用