C#/ XAML Windows UWPアプリケーションでさまざまなデバイスのマークアップを設定する3つの方法







そもそも、Windows 8.1でユニバーサルアプリケーションを作成できた方法を思い出したいと思います。 ソリューションは、電話用、Windows 8.1用、および共通コードを持つプロジェクトの3つのプロジェクトで作成されました。 Windows 10の今はどうですか? 今からお話しします。



これは、Windows 8.1でのユニバーサルアプリケーションの外観です。







しかし、その後Windows 10が登場し、すぐに合理的な質問が生じました。

もう一度学ぶのは今ですか?





部分的に小さな変更は本当にあります。 ただし、ユニバーサルWindows 8.1プロジェクトを十分に理解していれば、すべてが馴染みのあるものになります。 さらに、特定の柔軟性が追加されました。



まず、Windows UWPプラットフォーム上に現在存在するデバイス(販売用、計画中、またはプロトタイプ用)について考えてみましょう。











デバイスは個別のファミリに統合されています。











プラットフォームが大きくなり、デバイスの種類が時間とともに大きくなる可能性があるため、省略記号は図の上にあります。



これで、デバイスファミリごとに複数のプロジェクトを含むソリューションを取得する代わりに、名前にファミリの名前を指定してフォルダを作成するだけです。 たとえば、次のように:





この場合、アプリケーションをモバイルデバイスで起動すると、DeviceFamily-MobileフォルダーのMainPageページが表示されます。

さらに、MainPageというフォルダー内にページを作成する場合、MainPage.xaml.csコードファイルなしで作成されることに注意してください。



これが最初の方法でした。



2番目の方法は最初の方法と似ていますが、フォルダーを作成する代わりに、.DeviceFamily-Typeがファイル名に追加されます







3番目の方法は分離コードからです。

プロジェクトをコンパイルしてMainPage.gicsファイルを検討すると、InitializeComponentメソッドのオーバーロードを見つけることができます。これはSystem.Uri resourceLocatorをパラメーターとして使用します



public void InitializeComponent(global::System.Uri resourceLocator) { if (_contentLoaded) return; _contentLoaded = true; if (resourceLocator == null) { resourceLocator = new global::System.Uri("ms-appx:///MainPage.xaml"); } global::Windows.UI.Xaml.Application.LoadComponent(this, resourceLocator, global::Windows.UI.Xaml.Controls.Primitives.ComponentResourceLocation.Application); }
      
      





目的のページを読み込むために、これを行うことができます:



 public MainPage() { if (Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily=="Windows.Mobile") { InitializeComponent(new Uri("ms-appx:///MobileMainPage.xaml", UriKind.Absolute)); } else { InitializeComponent(); } }
      
      





この場合、アプリケーションがモバイルデバイスで起動されると、MobileMainPage.xamlページがロードされます。



次に、C#コードで現在使用されているデバイスファミリを特定する方法について少し説明します。 これを行うには、次のコードを使用すると非常に簡単です。



  if (String.Equals(Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily, "Windows.Desktop")) { //   Desktop   -   }
      
      





アプリケーションで特定のデバイスファミリのAPIを使用する場合は、UWPプラットフォームの拡張機能へのリンクを追加できます







デバイスファミリAPIを使用したハッキン​​グされた例は、電話のハードウェアの戻るボタン(ハードウェアの戻るボタン)の存在のチェックと考えることができます。



  bool isHardwareButtonsAPIPresent = Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"); if (isHardwareButtonsAPIPresent) { Windows.Phone.UI.Input.HardwareButtons.CameraPressed += HardwareButtons_CameraPressed; } private void HardwareButtons_CameraPressed(object sender, Windows.Phone.UI.Input.CameraEventArgs e) { //      «» }
      
      





検証には、 Windows.Foundation.Metadata.ApiInformationクラスに含まれているisTypePresentメソッドが使用されます。 このクラスには、使用可能なAPI機能(イベント、プロパティなど)を確認するための他のメソッドもあります



または、これはやや控えめな例です。デバイスにステータスバーがある場合、色がチョコレートに変わります。



  if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar")) { var statusBar = Windows.UI.ViewManagement.StatusBar.GetForCurrentView(); statusBar.BackgroundColor = Windows.UI.Colors.Chocolate; statusBar.BackgroundOpacity = 1; }
      
      









例はGitHubにあります



All Articles