libro
www.tuyano.com
初心者のためのWindows Phoneプログラミング入門

プロジェクトの中身を調べよう (5/6)

作成:2011-08-29 08:57
更新:2011-08-29 08:57

■App.xaml.csとApp.g.i.csについて

このApp.xamlに用意されているC#のコードが「App.xaml.cs」というファイルです。このソースコードを見てみると、下のリスト欄(上のもの)のようになっています。

これは、デフォルトでそこそこ長いコードが作成されていることがわかりますね。ただ、定義のない入れ物だけのメソッドもありますので、実質的にやっていることはそう複雑ではありません。では内容を整理しましょう。

1.名前空間とクラス定義
まず、PhoneApp1名前空間の中に「App」という名前のクラスが定義されていることがわかるでしょう。これは、先にApp.xaml<Application>タグの属性で「x:Class」に設定されていたものですね。

クラスは、「Application」というクラスを継承して定義されています。これがアプリケーションのクラスです。ここでアプリ起動時の処理から終了時まで、さまざまなアプリ本体のイベントに関する処理などが記述されます。

2.コンストラクタ
コンストラクタで行っていることは、整理すると「InitializeComponentの呼び出し」「InitializePhoneApplicationの呼び出し」「デバッグ時の設定」といったものです。これらは特に編集することはありません。アプリケーション起動時の基本的な処理と考えて下さい。

3.初期化処理
アプリの初期化処理は、「InitializePhoneApplication」「CompleteInitializePhoneApplication」として用意されてます。これらも実際に編集することはありませんので「こういう処理がある」程度に考えておけばいいでしょう。

4.その他のメソッド
先にApp.xaml<shell:PhoneApplicationService>タグの属性に指定されたメソッドが用意されていることがわかるでしょう。また、RootFrame_NavigationFailedApplication_UnhandledExceptionといったメソッドも見えます。これらは例外時の処理として追加されるもので、単にデバッガのBreakを呼び出しているだけです。

さて、ざっと目を通してみて、やっぱりページクラスと同様、InitializeComponentメソッドがないことに気づきます。これもやはりAppクラスのパーシャルクラスが用意されているのです。「App.g.i.cs(またはApp.g.cs)」というソースコードで、下のリスト欄(下のもの)のようになっています。ここで、App.xamlのロードを行っています。やはりこれも、プログラマに触って欲しくないために分割し、非表示にしているのでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

・App.xaml.csのソースコード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;

namespace PhoneApp1
{
	public partial class App : Application
	{
		public App()
		{
			UnhandledException += Application_UnhandledException;
			InitializeComponent();
			InitializePhoneApplication();
			if (System.Diagnostics.Debugger.IsAttached)
			{
				Application.Current.Host.Settings.EnableFrameRateCounter = true;
				PhoneApplicationService.Current.UserIdleDetectionMode =
					IdleDetectionMode.Disabled;
			}
		}

		private void Application_Launching(object sender, LaunchingEventArgs e){}
		private void Application_Activated(object sender, ActivatedEventArgs e){}
		private void Application_Deactivated(object sender, DeactivatedEventArgs e){}
		private void Application_Closing(object sender, ClosingEventArgs e){}

		private void RootFrame_NavigationFailed(object sender,
			NavigationFailedEventArgs e)
		{
			if (System.Diagnostics.Debugger.IsAttached)
			{
				System.Diagnostics.Debugger.Break();
			}
		}

		private void Application_UnhandledException(object sender,
			ApplicationUnhandledExceptionEventArgs e)
		{
			if (System.Diagnostics.Debugger.IsAttached)
			{
				System.Diagnostics.Debugger.Break();
			}
		}

		#region Phone application initialization

		private bool phoneApplicationInitialized = false;

		private void InitializePhoneApplication()
		{
			if (phoneApplicationInitialized)
				return;
			RootFrame = new PhoneApplicationFrame();
			RootFrame.Navigated += CompleteInitializePhoneApplication;
			RootFrame.NavigationFailed += RootFrame_NavigationFailed;
			phoneApplicationInitialized = true;
		}

		private void CompleteInitializePhoneApplication(object sender, 
			NavigationEventArgs e)
		{
			if (RootVisual != RootFrame)
				RootVisual = RootFrame;
			RootFrame.Navigated -= CompleteInitializePhoneApplication;
		}

		#endregion
	}
}


・App.g.i.csのソースコード

using System;
using System.Windows;
using System.Windows.Automation;
using System.Windows.Automation.Peers;
using System.Windows.Automation.Provider;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Resources;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace PhoneApp1 {
	
	public partial class App : System.Windows.Application {
		
		private bool _contentLoaded;
		
		[System.Diagnostics.DebuggerNonUserCodeAttribute()]
		public void InitializeComponent() {
			if (_contentLoaded) {
				return;
			}
			_contentLoaded = true;
			System.Windows.Application.LoadComponent(this,
					new System.Uri("/PhoneApp1;component/App.xaml",
					System.UriKind.Relative));
		}
	}
}
※関連コンテンツ

「初心者のためのWindows Phoneプログラミング入門」に戻る