面向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屬性表示該資源的限定符集合。
悟性高的朋友可能已經猜到其中的玄機了,不過猜不到也不用急,現在我們用上面的代碼做兩件事,做完這兩件事你就會明白了。
第一件事,在本地計算機和平闆模拟器上運作應用,然後得到如下圖的結果:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL4MTMxcTOxMjMwETMxgTMvwVNwUTMwIzLclDOzcjNz8CX1EDMyc2bsJ2Lc12bj5ycn9Gbi52YuAzcldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
第二件事,在手機模拟器上運作一下,得到結果如下:
不知道你看懂了沒,如果還沒有看出其中的奧妙,那老周就揭曉了:在資源限定符字典中,有一條記錄的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屬性也可以獲得平台名稱。
本文例子下載下傳位址:https://files.cnblogs.com/files/tcjiaan/deviceFamilySmp.zip