(この記事は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