SkyDrive へ移動
テンプレートを 『C:\Users\ユーザID\Documents\Visual Studio 2010\Templates\ProjectTemplates\Visual C#\Windows』にコピーします。Windows フォルダは C# の中に作成して下さい。
Window と ページ
WPF では、Form アプリケーションのように、Owner を取得する事ができないようなので、名前で Windows を参照する為のメソッドを App クラスの static メソッドに作成しています。( 同じ名前の Window を複数作成しないという前提です )
App.xaml.cs
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;
namespace WpfForm
{
public partial class App : Application
{
public static Window GetWindow(String name ) {
Window TargetWindow = null;
WindowCollection AppWindows = Application.Current.Windows;
foreach (Window Win in AppWindows)
{
if (Win.Name == name)
{
TargetWindow = Win;
break;
}
}
return TargetWindow;
}
}
}
MainWindow.xaml.cs
namespace WpfForm
{
public partial class MyMain : Window
{
public MyMain()
{
InitializeComponent();
this.frame1.Navigate(new MyPage());
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Window2 normalWindow = new Window2();
normalWindow.Show();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
Window2 normalWindow = new Window2();
bool? result = normalWindow.ShowDialog();
if (!(bool)result)
{
MessageBox.Show("キャンセル");
}
}
}
}
Null 許容 bool? 型 が使用されています
Window2.xaml.cs
namespace WpfForm
{
public partial class Window2 : Window
{
private Window3 normalWindow = null;
public Window2()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
MyMain owner = Application.Current.MainWindow as MyMain;
Debug.WriteLine(owner.Title);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
normalWindow = new Window3();
normalWindow.Show();
}
private void Command_Open_Click(object sender, RoutedEventArgs e)
{
Debug.WriteLine("メニューがクリックされました");
// Form 用のクラスの WPF ラッパー
OpenFileDialog ofg = new OpenFileDialog();
ofg.Filter = "JPEG|*.jpg*;*.jpg";
ofg.FilterIndex = 0;
ofg.FileName = "";
// Null 許容 bool? 型
bool? result = ofg.ShowDialog();
if ((bool)result)
{
// パスを表示
MessageBox.Show(ofg.FileName);
}
}
private void Command_Exit_Click(object sender, RoutedEventArgs e)
{
if (MessageBox.Show("終了しますか?", "終了確認", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
// ダイアログとして呼ばれた時のみ有効
// ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
try
{
this.DialogResult = true;
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
// ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
// ダイアログとして呼ばれた時のみ有効
Application.Current.Shutdown();
}
}
private void button2_Click(object sender, RoutedEventArgs e)
{
try
{
normalWindow.Close();
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
private void button3_Click(object sender, RoutedEventArgs e)
{
try
{
normalWindow.Navigate(new MyPage());
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
}
}
Frame 内の参照は、WEB ページの IFRAME と同様で以下のようになります
(this.frame1.Content as MyPage).button1.Content.ToString()