WindowsPhone7

最近、起業の資金が足らないので、バイトとしてWindowsPhone7のプログラムを書いています。なかなかに期限ぎりぎりの上に自分はSilverlightどころかC#さえ触ったことがなかったのでいい感じに悲惨なのですが、日本語資料がなかったのでかなり大変でした。ちょっとちょこちょこ書いていきたいと思います。続く気はしない(ぁ


情報

まず、情報があるサイトです。


日本語の記事は導入にはいいかもしれませんが、コントロールについての言及がかなり少ないです。主にCodeSample見つつがいいかも。
またToolkitというのは、MSが作っている、正規のコントロールになれなかったもの群らしく、ToggleSwitchなどがあります。

UIの簡単な説明

UI系としては、

  • SplashScreen
  • Page
  • AppricationBar
  • SystemTray

などがあります。以上でかいたPageはユーザーが自由に使える領域というざっぱな意味で書いているのでPivotなどはもしかしたらPageじゃないのかもしれません。まだ使ってないのでわかりかねます。

SplashScreen

アプリの起動待ち画面です

Page

開発者が自由に使える領域

AppricationBar

これは、いま作っているアプリの例ですが、この下にあるwith locationとかのメニューがあるのがApplicatonBarです。それぞれのアプリケーションで任意のメニュー、アイコンを追加できます。アイコンは4つまでです。Clickイベントが取れるので、ボタンのように扱えます。

SystemTray

バッテリー情報、時計などが表示されている画面上方に表示されるトレイ。ここは任意には作れませんが、メッセージは飛ばせます。

導入

WindowsPhone7の開発環境はインストーラーが用意されているので、それだけをさくっと入れれば入ります。VisualStudioですが、C#の環境などを事前に入れてなくても必要なものはすべて入るようです。詳しいところは日本語解説も結構ありそうなので省きます。
インストールが終わったら、とりあえず動かします。ゲームじゃないので、ProjectはSilverlightWindows Phone Applicationです。適当に名前をつけたらそのままDebug走らせます。何もしなくてもタイトルだけのプログラムが立ち上がります。ここで分かってもらえると思いますがAndroidとかと比べると驚異的な位エミュレーターが早いです。正直毎回うっかり消しても苦にならないほど。

サンプルとか

導入はこの辺にしてざっくざく切っていきます。以下あまり知らないのにメソッドとかいう用語つかうので間違ってたら指摘願います。

ページを増やす

Solution Explorerで適当にWindows Phone Portrait Pageを足すとかすれば新しいページを作れます。既存のページをコピーしても大丈夫です。
Button等のクリックで別のページに移動するには

        this.NavigationService.Navigate(new Uri("/NewPage.xaml", UriKind.Relative));

このような感じで大丈夫です。たとえば、button1をクリックした場合だと

 private void button1_Click(object sender, RoutedEventArgs e)
        {
                this.NavigationService.Navigate(new Uri("/NewPage.xaml", UriKind.Relative));
        }

とかけば大丈夫です。(ただし、XAML内でbutton1のクリック時に呼ぶイベントが別名になってる場合はメソッド名変わります、当然ですが)


また、引数を付けることもできて、

       NavigateTo("/NewPage.xaml?msg=test");

このようにして、後ろに「?引数名=値」とすると、

NavigationContext.QueryString.TryGetValue("msg", out msg)

これで、msgという変数に出力してくれます。たとえば、

       protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            string msg = "";

            if (NavigationContext.QueryString.TryGetValue("msg", out msg))

                textBlock1.Text = msg;

        }

このようにすると、飛ばされてきたときにメッセージを受け取ることができます。ここではtextBlock1の文字を受け取った文字に置き換えています。
OnNavigatedToは飛ばされてきたときに呼ばれるメソッドです。

ApplicationBarを使う

ApplicationBarは、簡単に使えて、かつ普段は隠せたりするので非常に便利です。ApplicationBarはxamlファイルのほうでは定義せず、csのほうで定義します。
以下にサンプルを掲載します。

using Microsoft.Phone.Shell;
            //Initializing ApplicationBar
            ApplicationBar = new ApplicationBar();
            ApplicationBar.IsMenuEnabled = true;
            ApplicationBar.IsVisible = true;
            ApplicationBar.Opacity = 1.0;


            ApplicationBarMenuItem locateItem = new ApplicationBarMenuItem("With Locate");
            locateItem.Click += new EventHandler(locateItem_Click);

            ApplicationBarMenuItem interestedItem = new ApplicationBarMenuItem("With Interested");
            interestedItem.Click += new EventHandler(interestedItem_Click);


            ApplicationBar.MenuItems.Add(locateItem);
            ApplicationBar.MenuItems.Add(interestedItem);

(2010/11/06)ApplicationBarを使うためには「using Microsoft.Phone.Shell」を記述する必要があります。
このコードは、上のほうに掲載した、Searchのページで実際に使っているコードです。コードはPageのインストラクタにでも貼り付けておくといいと思います。
みたらわかると思いますが、ざっくり説明すると

ApplicationBarMenuItem locateItem = new ApplicationBarMenuItem("With Locate");

ここのWith Locateがメニューアイテム名になります。

locateItem.Click += new EventHandler(locateItem_Click);

ここで、locateItem_Clickというメソッドをクリック時に呼び出すように指定しています。
それで最後に、ApplicationBarに追加するという形です。
また、iconを追加したい場合は、

            ApplicationBarIconButton enabled = new ApplicationBarIconButton(new Uri("/Images/menuenabled.png", UriKind.Relative));
            enabled.Text = "enabled";
            enabled.Click += new EventHandler(enabled_Click);

            ApplicationBar.Buttons.Add(enabled);

このような感じになります。このコードはオフィシャルのApplicationBarのサンプル引用です。
あと、このApplicationBarで使うアイコンは「Program files/Microsoft SDKs\Windows Phone\v7.0\Icons」の中にある程度用意されているので、それを使うといいと思います。


大学に行かないといけないのでとりあえずここらへんで。

夏休み

もうすぐ夏休みがおわりです。
気があまり進まなくてブログに書かなかったのですが、この夏はいろんなイベントに参加しました。
その筆頭として、1年以上ぶりにOSCに参加しました。
ひさしぶりに川合さんとお話できて、ほかにも得るものがたくさんあった(特に起業に関することで)のですが、さぼってましたw
写真がないのが残念です。

それ含めて、たびたび東京のほうに行きました。

えーっと、それだけですwちょっと東京が身近になりましたまる

p.s. 今度からブログ用にもっと写真撮ります

コミケいってきました

どうも、そらんです。
8月2回目の東京、今回はサークルの店番を兼ねて初コミケに言ってきました。
2日目と3日目に参加したのですが、3日目は店番の、2日目はすすたわりさんにサークルチケットをいただいたので両日ともサークル入場できました。


とりあえず戦利品。


品は一緒に行った @ktc5116 の分といっしょです。大体東方ものは彼のものです。
とりあえず2日目に関しては、技術系の方といろいろしゃべれたのがよかったです。
特に、トランジスタでアンプをつくってきた方とは、自分の失敗経験もあり、いろいろためになる話ができました。
また、すすたわりさん自身のボードもずいぶん変化を遂げており、SUSU-BOXでつかうのにふさわしい、ブロック式の拡張できるハードウェアになっていました。一辺5センチだそうです。


3日目は企業と東で買ったものが主です。
企業は私をこの世界へ招き入れたTYPE-MOONさんなどを買いました。
また、東はサークルチェックをしていなかったので、いろいろ見て買いました。結果としてほとんど猫耳本なったのは気のせいです(ぁ
でも、猫禁猟区がそうそうに終わっていたのが悲しかったです。
あとは、店番をしながら、横の静岡大浜松の方によくしていただいたりしました。ありがとうございます。


そんなこんなで2日参加して、今ホテルです。感想としては非常に面白かったです。正直技術系のブースだけ回っておしまいかと思っていましたが、3日目で予想外に飛ばしてしまいました。もしかして廃人への入り口ですかね・・・


そして、参加された皆様、本当にお疲れ様でした!

GSFesにいってきました!

昨日、takahiro氏に誘われてGSFesに行ってきました。
なぜかイベント中は回路が動かないといわれてずっと裏方で作業をしていて、結局プレゼンはほとんど聞けなかったのですが・・・
しかし、懇親会でいろんな方とお話ができて楽しかったです!
お話してくださった方々、本当にありがとうございました。


それからスタッフの方々、お疲れ様でした。

twitterやめました

どうも、お久しぶりです。サボってて申し訳ないです。そらんです。
今日Twitterやめました。まぁ理由は諸所あるんですが、Twilog観てもらえれば概ねわかると思います。
正直依存しすぎた。もうなんというか、情けない。
特に最近のPostは悲惨ですよね。仮にもPublicな場に何を流しているのかと・・・
またしばらくして、プログラムとか書くようになって、必要になったらやるかもしれません。ぜひともそうしたい。

しかし、正直受験末期から、大学生活にいたっては全範囲においてTwitterが非常に密接に生活にあったので、これからどうなるか不安ですね。
正直、以前よるものがなかったときを思い出すとぞっとする・・・
でも、逆にそれがあるからって現実の人間関係でおろそかになってた面もあるとおもうから、そこへも少し改善しよう。

結局かいてるうちにこれも垂れ流しになっちゃいましたね。
しかしやめたのによくしゃべってた人間のTLをリロードしまくってるような精神状況なので今日くらい許していただきたい。いや。だめだろうね。
明日からはがんばるよ。たぶん。

p.s. 再開しました。サーセンwwww