ホーム > コンピュータ > C# > WPF in C#

メインウィンドウから子ウィンドウを開く

概要

WPFで、メインウィンドウから子ウィンドウを開くコードの実装方法です。

実装手順

メインウィンドウをデザインします

[MainWindow.zaml]

 

<Window x:Class="MultiWindow01.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="150" Width="200">
    <Grid>
        <Button Name="btn0" HorizontalAlignment="Center" 
        			VerticalAlignment="Center" Width="100" Height="50">
            別のウィンドウを開く
        </Button>
    </Grid>
</Window>
				
メインウィンドウのデザイン

サブウィンドウを追加します。

ソリューションエクスプローラーから追加を選択します。

ソリューションエクスプローラーのプロジェクト上で、右クリックしてコンテキストメニューを表示させます。メニューで、「追加」→「新しい項目」を選択します。

ウィンドウ(WPF)を追加します。

ウィンドウ(WPF)を追加します。

サブウィンドウをデザインします

[Window1.zaml]


<Window x:Class="MultiWindow01.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SubWindow" Height="150" Width="200">
    <Grid>
        <Button Name="btn0" HorizontalAlignment="Center" 
        			VerticalAlignment="Center" Width="100" Height="50">
            閉じる
        </Button>

    </Grid>

</Window>
				
サブウィンドウをデザインします

イベントを追加します

MainWindow.zamlのボタンにクリックイベントを追加します。

[MainWindow.zaml]


<Window x:Class="MultiWindow01.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="150" Width="200">
    <Grid>
        <Button Name="btn0" HorizontalAlignment="Center" 
        			VerticalAlignment="Center" Width="100" Height="50" Click="btn0_Click">
            別のウィンドウを開く
        </Button>

    </Grid>

</Window>
				

イベントの動作を実装します。Window1のインスタンスを作成し、Show()メソッドでウィンドウを表示します。 ウィンドウをどのクラスで宣言したらいいのかわからないので、verでインスタンスを作成します。

[MainWindow.zaml.cs]


using System.Windows;

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

        private void btn0_Click(object sender, RoutedEventArgs e)
        {
            var win = new Window1();
            win.Show();
        }
    }
}
				

[Window1.zaml]にもクリックイベントを追加します。

[Window1.zaml]


<Window x:Class="MultiWindow01.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SubWindow" Height="150" Width="200">
    <Grid>
        <Button Name="btn0" HorizontalAlignment="Center" 
        			VerticalAlignment="Center" Width="100" Height="50" Click="btn0_Click">
            閉じる
        </Button>

    </Grid>

</Window>
				

ボタンを押したら、Window1を閉じるコードを実装します。

[Window1.zaml.cs]


using System.Windows;

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

        private void btn0_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
    }
}
				

説明

メインウィンドウの「別のウィンドウを開く」ボタンを押すと、別のウィンドウが開きます。そのウィンドウの「閉じる」ボタンを押すと、開いたウィンドウを閉じます。

ここでのポイントは、ウィンドウを開く前に、ウィンドウのインスタンスを作成ししておくことです。

CodeFile

参考サイト

動作確認環境

Microsoft Visual Studio Express 2013 for Desktop 64bit
Windows 8.1 pro 64bit
ページトップへ
WPF in C#
C#
Copyright (C) 2011-2016 kukekko All Rights Reserved.
kukekko@gmail.com
ご連絡の際はアドレスの@は半角にしてください。 また、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません 」。
inserted by FC2 system