Windows8 Metro:初めてのアプリはWindowsPhoneからの移植

木曜日 , 22, 3月 2012 Leave a comment

 (この記事はWindows8Consumer Preview+VisualStudio11betaを用いて書かれています)

 

 念頭にあったのは、WindowsPhone用のアプリの移植性の容易さ。

 

 WindowsPhoneもWindows8もメトロアプリなら移植も簡単さ!!

 

 てなことを言いたかったわけです。

 Windows8がWinRTという新しいAPIを導入するのは知ってはいましたが・・・

 

いきなり楽じゃない・・・

 

 最初に移植したのは「にゃん時計」という時計アプリ。

 タイマー処理をして時計を表示するだけの簡単アプリなので、移植もあっという間のはずですよねぇ。

 

 ・・・・

 

 気が付けば1時間が経過していました。

 時計アプリの移植にこんなに時間がかかってしまうなんて!!

 

Timerクラスが無い??

 

 Windows8のMetroスタイルアプリを開発する際にはTimerクラスが使えません。

 簡単に「使えません」なんて書きましたが、最初はかなり驚きました。

 

 WindowsPhoneの場合、

 

            Timer timer = new Timer(new TimerCallback(this._timerEvent), null, 0, 1 * 1000);

 

 と書いていた部分が、

 

// タイマーの指定がTimerクラスが無いThreadPoolTimerクラスを使う
PeriodicTimer = ThreadPoolTimer.CreatePeriodicTimer(new TimerElapsedHandler(PeriodicTimerCallback), TimeSpan.FromMilliseconds(500));

 

 こうなります。

 ThreadPoolTimerクラスを使います。

 

Imageクラスの使い方が違う??

 

 画像の処理も異なります。

 WindowsPhone(というかSilverlight)なら

 

            this.images[i] = new BitmapImage();
            this.images[i].UriSource = new Uri("String.Format(/Assets/Images/{0}.PNG", i), UriKind.Relative);

 

 こう書いていた部分が、

 

                        var uriFile = String.Format("ms-appx:///Assets/Images/{0}.PNG", i);
                        var uri = new Uri(uriFile);

                        ImageSource imagesrc = new BitmapImage(uri);

 

 こう変わります。

 アプリ内の画像のパスはms-appx://から始まる書式で指定。

 Uriクラスに渡す引数もちょっと変わっています。

 

 ImageSourceクラスはImageクラスのSourceプロパティにそのまま代入すればいいので、Imageクラスに渡す際は、

 

// image1はImageコントロールimagesはImageSourceクラスの配列
this.image1.Source = this.images[0];

 

 土曜日のWebTouchMeetingは、ほらWindowsPhone開発のノウハウで簡単移植!! なんて展開をもくろんでいたんだけど、早速雲行きが怪しくなってきました。

 

なにはともあれ記念すべき初アプリ


Please give us your valuable comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です