///////////////
// Window04.cs
///////////////
using System;
using System.Windows;
using System.Windows.Controls;

/* WPFの場合に参照すべきDLL
	C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\WindowsBase.dll
	C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationCore.dll
	C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll
	C:\Windows\Microsoft.NET\Framework\v4.0.30319\Xaml.dll	//Xaml使用のみならず↑のdllで参照される
*/

namespace Window04
{
	///////////////////////////
	//エントリーポイントクラス
	///////////////////////////
	class MainApp
	{
		[STAThread]
		public static void Main()
		{
/*			Windows.Formでは問題が無かった次の書式、
			"Application.Run(new MainWindow());"
			が"CS0120: 静的でないフィールド、メソッド、またはプロパティでオブジェクト参照が必要です"
			というエラーになるので注意。
*/
			MainWindow mwnd = new MainWindow();
			Application ap = new Application();	//明示的にインスタンスを作らなければならない
			ap.Run(mwnd);
		}
	}

	public partial class MainWindow : Window	//派生元が"Form"から"Window"となる
	{
		public MainWindow()
		{
			//this.Loaded += new RoutedEventHandler(Window_Loaded);
			//this.ContentRendered += new EventHandler(Window_ContentRendered);
			this.Loaded += Window_Loaded;
			this.ContentRendered += Window_ContentRendered;
			//this.Activated += new EventHandler(Window_Activated);		//これを有効にするとMopuseDownとButton Clickイベントがsupersedeされる
			this.MouseDown += Window_MouseDown;	//Clickではない
			this.Closing += Window_Closing;
			InitControl();						//Visual Studioで自動作成されるInitializeComponent()のコードは末尾参照
		}

		public void InitControl()
		{
			//Windowのプロパティ：https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.window?view=windowsdesktop-8.0
			//this.Text = "WPF サンプル";			//TextからTitleになった
			this.Title = "WPF サンプル";
			//this.Size = new Size(640, 480);		//Sizeは無くなった
			this.Width = 640;
			this.Height = 480;
			//this.StartPosition = FormStartPosition.CenterScreen;	//StartPositionは廃止された
			//this.Location = new Point(100, 100);	//Locationも廃止された
			this.WindowStartupLocation = WindowStartupLocation.CenterScreen;	//Manual, CenterOwnerもある（Manyualの場合、LeftとTopプロパティの値）
			//this.BackColor = SystemColors.Window;	//Color BackColorからBrush Backgroundになった
			//WPFのSystemColors－https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.systemcolors?view=windowsdesktop-8.0
			this.Background = SystemColors.WindowBrush;

			Button btn = new Button();
			btn.Width = 240;
			btn.Height = 80;
			btn.HorizontalAlignment = HorizontalAlignment.Center;
			btn.VerticalAlignment = VerticalAlignment.Center;
			btn.Margin = new Thickness(50, 50, 50, 50);	//構造体 Thickness(左, 上, 右, 下)
			btn.Content = "I am a button.";
			btn.Click += Button_Click;
			this.Content = btn;
		}

		private void Window_Loaded(object sender, EventArgs e)
		{
			MessageBox.Show("プログラムがロードされました。", "Loadedイベント", MessageBoxButton.OK, MessageBoxImage.Information);
		}

		private void Window_ContentRendered(object sender, EventArgs e)
		{
			MessageBox.Show("ウィンドウが完成しました。", "ContentRenderedイベント", MessageBoxButton.OK, MessageBoxImage.Information);
		}

		private void Window_Activated(object sender, EventArgs e)
		{
			MessageBoxResult result = MessageBox.Show("ウィンドウがアクティブになりました。\r\n終了しますか？", "Activatedイベント", MessageBoxButton.YesNo, MessageBoxImage.Question);
			if(result == MessageBoxResult.Yes)
				Close();
		}

		void Window_MouseDown(object sender, EventArgs e)
		{
			MessageBox.Show("ウィンドウがクリックされました。", "Clickイベント", MessageBoxButton.OK, MessageBoxImage.Information);
		}

		void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
		{
			MessageBoxResult result =
			MessageBox.Show("ウィンドウを閉じようとしています。\r\nよろしいですか？", "Closingイベント", MessageBoxButton.YesNo, MessageBoxImage.Question);
			if(result == MessageBoxResult.No)
				e.Cancel = true;
		}

		void Button_Click(object sender, RoutedEventArgs e)
		{
			MessageBox.Show("ボタンがクリックされました。", "Button Clickイベント", MessageBoxButton.OK, MessageBoxImage.Information);
		}
	}
}
/* 参考－InitializeComponent()を含む自動作成コード例
// SampleWpfApplication
using System.Windows;
using System.Windows.Markup;
 
namespace SampleWpfApplication
{
	public partial class MainWindow : Window, IComponentConnector
	{
		private bool _contentLoaded;

		public void InitializeComponent()
		{
			if (_contentLoaded) return;
			_contentLoaded = true;
			System.Uri resourceLocater = new System.Uri(
				"/SampleWpfApplication;component/mainwindow.xaml",
				 System.UriKind.Relative);
			System.Windows.Application.LoadComponent(
				this, resourceLocater);
		}

		void IComponentConnector.Connect(int connectionId, object target)
		{
			this._contentLoaded = true;
		}
	}
}
*/
