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