かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Windows 10 TPでバックボタンのように電話固有機能などを記述する方法

Windows 10 TP時点の情報です

Windows 8.1までのユニバーサルアプリでは#if ~ #endifを使ってコンパイル時に有効、無効を切り替えるスタイルでした。Windows 10 TPのUAPでは、実行時に機能の有無を調べて対応するようになりました。これによって、メソッド単位、クラス単位などOS単位の#ifに比べてより細かな制御ができるようになっています。(実行時にやるから速度は落ちるんかいな?)

クラスなどが使えるかどうかの判断はWindows.Foundation.Metadata.ApiInformationクラスに用意されてる各種メソッドを使っておこないます。メソッドの引数は文字列で判別したクラス名などの文字列を渡します。

  • IsTypePresent : 引数で渡した型が提供されているか
  • IsPropertyPresent : 引数で渡したプロパティが提供されているか
  • IsMethodPresent : 引数で渡したメソッドが提供されているか

このほかにもイベントとか、読み取り専用プロパティがあるかとか細かく色々判別が可能です。

さて、OSごとの差分でよくあるコードだとWindows Phoneの戻るボタンへの対応がありますが、これに対応するには以下のようなコードになります。

var tn = "Windows.Phone.UI.Input.HardwareButtons";
if (ApiInformation.IsTypePresent(tn))
{
    HardwareButtons.BackPressed += (_, e) =>
    {
        if (this.Frame.CanGoBack)
        {
            this.Frame.GoBack();
        }
    };