読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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();
        }
    };