libro
www.tuyano.com
C#ではじめるWindows 8アプリ開発入門

App.XamlとMainPage.Xaml (2/5)

作成: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というウインドウの土台のようなものを設定して表示させている、ということはなんとなくイメージできるでしょう。

これも、すぐにいろいろ書き換えたりすることはないので、だいたいの働きがわかれば今は十分でしょう。

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

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();
        }
    }
}
※関連コンテンツ

「C#ではじめるWindows 8アプリ開発入門」に戻る