Windows 8への環境移行に伴い、Visual Studio 2012 Ultimate(中国語版)およびWindows Phone 8 SDKの導入を行いました。その際、言語エディションの不一致によるトラブルが発生しました。最初に英語版のWindows Phone 8 SDKをダウンロードしてインストールを試みたところ、既存のVS2012 Ultimateがあるにもかかわらず、自動的にVS 2012 Expressが併せてインストールされてしまいました。この状態では、VS2012 Ultimate側からWP8 SDKが正しく認識されず、プロジェクト作成時にエラーが表示されます。
解決策としては、英語版のSDKとVS 2012 Expressをアンインストールし、Visual Studioと同じ言語エディション(中国語版)のWindows Phone 8 SDKを改めてインストールすることで、正常に動作するようになりました。
開発においてターゲットとするOSバージョンの選択は重要です。Windows Phone OS 8.0をターゲットにした場合、アプリはWP8デバイスでのみ動作します。一方、Windows Phone OS 7.1をターゲットにしたアプリは、7.1および8.0の両方のデバイスで互換性を持ちます。
デバッグ支援ツールとして、独立ストレージ内のデータを確認する「Isolated Storage Explorer (ISETool.exe)」が提供されています。また、パフォーマンス最適化の観点から、テキスト関連のプロパティ(特にフォントサイズや前景色など)へのアニメーション適用は慎重に行う必要があります。Windows Phoneではテキストレンダリングにヒンティング処理が行われるため、これらのプロパティを頻繁に更新するとシステムリソースを大幅に消費する可能性があります。
ユーザー入力を受け付けるコントロールとして、一般的なテキスト入力にはTextBoxを、認証シーンなどのパスワード入力にはPasswordBoxを使用します。これらの主な違いは、入力された文字の表示方法にあります。TextBoxは入力文字がそのまま表示されますが、PasswordBoxはセキュリティのため、入力文字がマスク文字(●など)に置き換えられて表示されます。
なお、メディア同期ツールであるZuneのインストール時にも注意が必要です。インストーラの競合エラーが発生した場合は再起動が必要です。また、Windows 8環境では、.NET Framework 2.0や3.0のランタイムが必要となるケースがあり、事前のインストールが求められることがあります。これらの依存関係を解決した後、Zuneを起動し、Windows Phone端末を接続します。
数値キーボードの設定実装
入力フィールドでキーボードの種類を制御するには、以下のようにInputScopeプロパティを設定します。ここでは電話番号入力向けの数値キーボードを定義する例を示します。
var inputScope = new InputScope();
var scopeName = new InputScopeName();
// 名前値を数値入力に設定
scopeName.NameValue = InputScopeNameValue.TelephoneNumber;
inputScope.Names.Add(scopeName);
// 対象のテキストボックスに適用
phoneNumberInput.InputScope = inputScope;
ローカルIPアドレスの取得
デバイスのIPアドレスを取得する場合、ネットワークインターフェースの情報をフィルタリングして抽出します。以下はLINQを使用してIPv4アドレスを効率的に取得する実装例です。
public static string RetrieveLocalIp()
{
var networkHosts = NetworkInformation.GetHostNames();
// IP情報が存在し、且つIPv4アドレスであるものを抽出
var ipAddress = networkHosts
.Where(host => host.IPInformation != null && host.Type == HostNameType.Ipv4)
.Select(host => host.DisplayName)
.FirstOrDefault();
return ipAddress;
}