App.XamlとMainPage.Xaml (2/5)
作成:2014-01-18 11:54
更新:2014-01-18 11:54
更新:2014-01-18 11:54
■App.Xaml.csについて
では、App.xaml内にあるC#ソースコード「App.Xaml.cs」では、どのような処理が用意されているのでしょうか。下にソースコードを掲載したのでざっと眺めてみましょう(コメント類はカットしてあります)。
●using文
多数のusing文がありますね。SystemはおそらくC#利用者ならおなじみでしょうが、その他にWindowsパッケージとWindows.UI.Xamlパッケージのクラスが多くusingされているのがわかります。これらはアプリケーションとXamlに関するクラスがまとめられているところです。
●namespace MyWin8App
名前空間の指定ですね。アプリケーションは、たいていそのアプリケーション名の名前空間下にクラスが作成されます。
●sealed partial class App : Application
これが名前空間内に用意されるクラスの定義部分になります。「App」というクラスは、Windows.UI.Xamlパッケージに用意されているApplicationというクラスを継承して作成されます。このApplicationがアプリケーション本体としての機能を実装したものです。アプリケーションは、すべてこのクラスを継承して作成されます。
●public App()
コンストラクタですね。この中では、InitializeComponentを呼び出し、それからSuspendingというイベントにOnSuspendingメソッドを組み込んでいます。
●protected override void OnLaunched(LaunchActivatedEventArgs e)
このOnLaunchedメソッドは、起動時の処理を行うイベント用のメソッドです。ここでは「Frame」というクラスのインスタンスを作り、Window.Current.Contentに設定する処理をしています。まだよくわからないでしょうが、要するに「Frameというのをアプリケーションのウインドウとして画面に表示している」と考えるとよいでしょう。
●void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
これは表示されている画面(ページといいいます)の切り替えなどに失敗した時のエラーイベント用のメソッドです。
●private void OnSuspending(object sender, SuspendingEventArgs e)
アプリケーションが(他のアプリに処理が切り替わるなどして)一時停止した時のイベント要メソッドです。
――まだ細かな処理はわからないでしょうが、アプリケーションを起動して、重要なイベント用のメソッドを設定し、Frameというウインドウの土台のようなものを設定して表示させている、ということはなんとなくイメージできるでしょう。
これも、すぐにいろいろ書き換えたりすることはないので、だいたいの働きがわかれば今は十分でしょう。
●using文
多数のusing文がありますね。SystemはおそらくC#利用者ならおなじみでしょうが、その他にWindowsパッケージとWindows.UI.Xamlパッケージのクラスが多くusingされているのがわかります。これらはアプリケーションとXamlに関するクラスがまとめられているところです。
●namespace MyWin8App
名前空間の指定ですね。アプリケーションは、たいていそのアプリケーション名の名前空間下にクラスが作成されます。
●sealed partial class App : Application
これが名前空間内に用意されるクラスの定義部分になります。「App」というクラスは、Windows.UI.Xamlパッケージに用意されているApplicationというクラスを継承して作成されます。このApplicationがアプリケーション本体としての機能を実装したものです。アプリケーションは、すべてこのクラスを継承して作成されます。
●public App()
コンストラクタですね。この中では、InitializeComponentを呼び出し、それからSuspendingというイベントにOnSuspendingメソッドを組み込んでいます。
●protected override void OnLaunched(LaunchActivatedEventArgs e)
このOnLaunchedメソッドは、起動時の処理を行うイベント用のメソッドです。ここでは「Frame」というクラスのインスタンスを作り、Window.Current.Contentに設定する処理をしています。まだよくわからないでしょうが、要するに「Frameというのをアプリケーションのウインドウとして画面に表示している」と考えるとよいでしょう。
●void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
これは表示されている画面(ページといいいます)の切り替えなどに失敗した時のエラーイベント用のメソッドです。
●private void OnSuspending(object sender, SuspendingEventArgs e)
アプリケーションが(他のアプリに処理が切り替わるなどして)一時停止した時のイベント要メソッドです。
――まだ細かな処理はわからないでしょうが、アプリケーションを起動して、重要なイベント用のメソッドを設定し、Frameというウインドウの土台のようなものを設定して表示させている、ということはなんとなくイメージできるでしょう。
これも、すぐにいろいろ書き換えたりすることはないので、だいたいの働きがわかれば今は十分でしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
namespace MyWin8App
{
sealed partial class App : Application
{
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
}
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
#if DEBUG
if (System.Diagnostics.Debugger.IsAttached)
{
this.DebugSettings.EnableFrameRateCounter = true;
}
#endif
Frame rootFrame = Window.Current.Content as Frame;
// ウィンドウがアクティブであることだけを確認してください
if (rootFrame == null)
{
rootFrame = new Frame();
rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0];
rootFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO:
}
// フレームを現在のウィンドウに配置します
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null)
{
rootFrame.Navigate(typeof(MainPage), e.Arguments);
}
// 現在のウィンドウがアクティブであることを確認します
Window.Current.Activate();
}
void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
{
throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
}
private void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
//TODO:
deferral.Complete();
}
}
}
※関連コンテンツ