面向22世紀的現代化應用程序可以同時在多種設備上運行,於是有朋友會有一個疑問:有時候,我們還真的需要判斷一下,UAP應用程序在哪個平台上運行。盡管大多情況下我們不必要這樣做,但某些特殊情況還得考慮。比如一串數據列表,我希望如果在桌面上運行時就以橫向列表展現;但要是運行在手機上就以縱向列表展現。
也就是說,其實我們只需分析兩種情況即可:
一、桌面。(台式機、筆記本、平板、游戲機、發廣告專用機、導航器……)
二、移動環境。其實就是手機。
那么,有啥辦法可判斷呢?勿急,老周先告訴你,方法比較簡單。咱們先看一段代碼:
var context = ResourceContext.GetForCurrentView(); string s = string.Empty; foreach (var item in context.QualifierValues) { s += item.Key + " : " + item.Value; s += "\n"; } tb.Text = s;
ResourceContext類在Windows.ApplicationModel.Resources.Core命名空間下,就是用於訪問與當前應用程序的限定資源的API,也可以把這個“資源”理解為應用程序的一些配置信息,如什么語言的,日語的還中文的;什么主題基調的,淺色還是深色;什么比例的,縮放100%還是180%……
調用ResourceContext.GetForCurrentView()方法可以直接得到ResourceContext實例,再通過QualifierValues屬性得到一個字典數據:Key為字符串,Value也是字符串。QualifierValues屬性表示該資源的限定符集合。
悟性高的朋友可能已經猜到其中的玄機了,不過猜不到也不用急,現在我們用上面的代碼做兩件事,做完這兩件事你就會明白了。
第一件事,在本地計算機和平板模擬器上運行應用,然后得到如下圖的結果:
第二件事,在手機模擬器上運行一下,得到結果如下:
不知道你看懂了沒,如果還沒有看出其中的奧妙,那老周就揭曉了:在資源限定符字典中,有一條記錄的Key為DeviceFamily,如果在桌面上運行的話,它的Value就是Desktop;如果在手機上運行,Value就是Mobile。
怎么樣,現在懂了吧?
那么,你猜猜,如果判斷UAP正在運行的設備,該想到方法了吧。
老周給出個例子,界面上有個StackPanel容器,里面放了幾塊正方形的燒餅。如果在桌面上運行,燒餅就橫着放;如果在手機上運行,燒餅就豎着放,以方便用戶流口水。
XAML代碼如下:
<StackPanel Margin="15" Name="panel"> <Rectangle Margin="14" Width="125" Height="125" Fill="Yellow"/> <Rectangle Margin="14" Width="125" Height="125" Fill="Red"/> <Rectangle Margin="14" Width="125" Height="125" Fill="Pink"/> <Rectangle Margin="14" Width="125" Height="125" Fill="Orange"/> </StackPanel>
處理代碼如下:
// 得到資源上下文對象 ResourceContext resContext = ResourceContext.GetForCurrentView(); // 訪問鍵名為DeviceFamily的值 string value = resContext.QualifierValues["DeviceFamily"]; // 分析 if (value == "Desktop") { panel.Orientation = Orientation.Horizontal; } else { panel.Orientation = Orientation.Vertical; }
OK,首先,在本地計算機上運行一下,結果如下:
接着,在手機模擬器上運行,結果如下:
看來這個DeviceFamily確實很Family。
補充:后來發現,訪問Windows.System.Profile.AnalyticsVersionInfo.DeviceFamily屬性也可以獲得平台名稱。
本文例子下載地址:http://files.cnblogs.com/files/tcjiaan/deviceFamilySmp.zip