Pocket

WindowsPhone Advent Calender 2013 22日目担当のいっちゅうです。

Advent Calendarってことで
WindowsPhoneでカレンダーっぽいものを作ってみようかな?
ちょっと探してみたけど、今まで同じような記事書いてる人いないみたいだし。

完成イメージはこんな感じです。
WPAC10

今回はWindowsPhone8.0SDK(VisualStudio Express 2012 for WindowsPhone )が入っていることが前提です。
試したい人でまだWindowsPhone8.0 SDKが入っていない人は入れてください。ここ
(インストールにはWindows8の64bit版が必要です。)
ちなみにWindowsPhoneSDK7.1~7.8でもほぼ同じはずです。

ではさっそく。(C#で説明させて頂きます)
ソリューション作るよー。
標準テンプレートの「Windows Phoneアプリ」選択し、ソリューション名を決めます。
(ここでは「Calendar」にします)
WPAC01
WPAC02

ページ名でかっ!
WPAC03

ってことでちょっといじります。
Styleを消してフォントサイズを30、名前を付けます。

WPAC04

ローテーションを横画面にも対応させておきます。
WPAC05

メインコンテンツのGridのColumnを日月火水木金土の7列、
Rowを7行に分割しておきます。

1行目は曜日ラベルで、日付のマスは最大でも6行あれば1ヶ月分を表示できます。
1日が土曜日だとして、1ヶ月は最大31日のため、1引いて30日分を7で割ると4余り2、
つまり5行分ですね。最初の1日の1行を足して6行となるわけです。
以下をGridの中にコピペします。

※好みの問題ですがデバイスのテーマもライトに変えます。
WPAC06

曜日のヘッダーをXAMLで書きましょう。

WPAC07_2

XAML部分はここで終わりです。以降はコードビハインドで描画します。
WPAC08

今回は面倒なので全部コンストラクターに書いています。

変数を作っておきます。

ページ名に年月を入れます。

1日の曜日を調べます。(どのマスから開始するか)
まず今月1日の日付型変数を作っておきます。

1日の曜日を調べて最初のマスをマイナス何日すればいいか変数に代入する。

最初のマスの日付を算出してカウントを初期化しておきます。

6行、7列をループさせるfor文を書きます。

以降for文ループの中に記述します。
まず1マスのボーダー線を設定します。

バックカラーを設定します。

マスに日付を入れます。
予定などを入れたい場合は日付の後ろに付けます。

最後に日付をカウントアップします。

デバッグすると以下のように表示されると思います。
WPAC09

ただしこれだけだと、祝日が表示されていません。
「HolidayChecker.cs」クラスをプロジェクトにに追加します。(クラスの中身の説明は省略します)
「//平日」の部分を以下のように書き換えます。

これで祝日も表示されるようになりました。
WPAC10

横画面だとこんな感じ。ちゃんとローテートしても調整されます。XAML素晴らしい。
WPAC11

如何だったでしょうか?
応用すれば自作カレンダーコントロールとかも作れると思います。

今回のプロジェクトのソースはこちら→Calendar
「HolidayChecker.cs」クラスはこちら→HolidayChecker

来年こそ日本でWindowsPhone8で出ることを願っていますw
ではではー。